2010-03-18 18 views
36

¿Hay una forma de Python sin usar un subproceso para clonar un repositorio de git? Estoy dispuesto a usar cualquier tipo de módulos que recomiende.Manera de Python para clonar un repositorio de git

+3

gitpy, supongo que sería llamado – SilentGhost

+0

@SilentGhost: ¿Quiere decir esto * * gitpy? http://github.com/vmalloc/gitpy de http://www.ryaari.com/blog/?p=9 – VonC

+0

Parece que hay GitPython (http://pypi.python.org/pypi/GitPython, http: //gitorious.org/git-python) que no creo que tenga un método de clonación, pero apostaría que podrías agregar uno ... internamente va a tener que llamar a 'git clone' de todos modos. – Cascabel

Respuesta

19

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 agradable y no sé si es la forma compatible de hacerlo, pero funcionó)

+0

No creo que esto clone. – Cascabel

+0

Lo hace. Pero es un poco intrincado. – Debilski

+1

Oh, mi mal, me perdí esa posibilidad. Mike, solo recuerda, internamente esto solo está llamando ejecutable al git de todos modos; solo lo está manejando un poco para ti. – Cascabel

1

Con punta de Dulwich usted debe estar capaz de hacer:

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

Esto es aún muy básico - se copia a través de los objetos y los árbitros, pero todavía no crea el contenido del árbol de trabajo si se crea un repositorio no-desnudo.

60

El uso de GitPython le dará una buena interfaz de Python para Git.

Por ejemplo, después de instalarlo (pip install gitpython), para la clonación de un nuevo repositorio puede utilizar clone_from función:

from git import Repo 

Repo.clone_from(git_url, repo_dir) 

Nota: GitPython requiere git ser instalado en el sistema, y ​​accesible a través de PATH del sistema .

+1

No funcionó para mí porque "pip install gitpython" no instaló la compilación más reciente, en cambio instaló 1.7 que no tiene clone_from. Lo siento por el downvote, mi b :( – blented

+4

@blented Gracias por mencionarlo, pero desafortunadamente es debido a las versiones cargadas de GitPython (el 1.7 es muy antiguo). De todos modos, espero que cualquiera que vea esta pregunta pueda averiguarlo simplemente do 'pip install gitpython == 0.3.2.RC1' en su lugar! –

+1

@AmirAliAkbari 0.3.2 RC1 es ahora el candidato de instalación predeterminado. – Kasisnu

4

de Github libgit2 de unión, pygit2 proporciona una sola línea clonación de un directorio remoto:

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

Mi solución es muy simple y sencillo. Ni siquiera necesita la entrada 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 [email protected]:/your/project/name.git" 

os.system("sshpass -p your_password ssh [email protected]_localhost") 
os.chdir(path) # Specifying the path where the cloned project has to be copied 
os.system(clone) # Cloning 

print "\n CLONED SUCCESSFULLY.! \n" 
Cuestiones relacionadas