Patch Set 1: I would prefer that you didn't submit this

I don't think you need to set the repo field in the command during clone.  Instead it starts to sound like Clone and Init cannot be GitCommand types, because they don't always start out with a Repository.  But that might be OK, they can't be created by a Git type either because the Git type needs a Repository and we don't have one yet.