Manera de Python para clonar un repository git

¿Hay una forma de Python sin usar un subprocess para clonar un repository de git? Estoy dispuesto a usar cualquier tipo de modules que recomiende.

Hay http://gitorious.org/git-python/ . No he oído hablar de eso antes e internamente, confía en tener los ejecutables de git en algún lado; Además, pueden tener muchos errores. Pero podría valer la pena intentarlo.

Cómo clonar:

 import git git.Git("/your/directory/to/clone").clone("git://gitorious.org/git-python/mainline.git") 

(No es bueno y no sé si es la manera admitida de hacerlo, pero funcionó).

Usar GitPython te dará una buena interfaz de Python para Git.

Por ejemplo, después de instalarlo ( pip install gitpython ), para clonar un nuevo repository puede usar la function clone_from :

 from git import Repo Repo.clone_from(git_url, repo_dir) 

Nota: GitPython requiere que git se instale en el sistema y se puede acceder a través de la RUTA del sistema.

La unión de libgit2 de Github, pygit2 proporciona una clonación de un liner en un directory remoto:

 clone_repository(url, path, bare=False, repository=None, remote=None, checkout_branch=None, callbacks=None) 

Mi solución es muy simple y directa. Ni siquiera necesita la input manual de paráfrasis / contraseña.

Aquí está mi código completo:

 import os import sys path = "/path/to/store/your/cloned/project" clone = "git clone gitolite@10.10.10.55:/your/project/name.git" os.system("sshpass -p your_password ssh user_name@your_localhost") os.chdir(path) # Specifying the path where the cloned project has to be copied os.system(clone) # Cloning print "\n CLONED SUCCESSFULLY.! \n" 

Con la punta Dulwich deberías poder hacer:

 from dulwich.repo import Repo Repo("/path/to/source").clone("/path/to/target") 

Esto sigue siendo muy básico: copy a través de los objects y los refs, pero aún no crea el contenido del tree de trabajo si usted crea un repository no desnudo.