Create a new repo.Checkout() overload which accepts a Commit object
Teach Repository.Init() to set up a separate git directory
Obsolete repo.Init() overload which returns a Repository
Obsolete repo.Clone() overload which returns a Repository