2010-03-18 19 views
36

Esiste un modo Python senza utilizzare un sottoprocesso per clonare un repository git? Sono pronto per l'utilizzo di qualsiasi tipo di modulo che consigli.Python per clonare un repository git

+3

gitpy, credo che sarebbe chiamato – SilentGhost

+0

@SilentGhost: vuoi dire * questa * gitpy? http://github.com/vmalloc/gitpy da http://www.ryaari.com/blog/?p=9 – VonC

+0

Sembra che ci sia GitPython (http://pypi.python.org/pypi/GitPython, http: //gitorious.org/git-python) che non credo abbia un metodo di clonazione, ma scommetto che potresti aggiungerne uno ... internamente dovrà comunque chiamare 'git clone' comunque. – Cascabel

risposta

19

C'è http://gitorious.org/git-python/. Non ne ho mai sentito parlare prima e internamente, si basa sul fatto di avere gli eseguibili git da qualche parte; Inoltre, potrebbero avere molti bug. Ma potrebbe valere la pena provare.

come clonare:

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

(. Non è bello e non so se è il modo supportato per farlo, ma ha funzionato)

+0

Non credo che questi cloni. – Cascabel

+0

Lo fa. Ma è un po 'contorto. – Debilski

+1

Oh, mio ​​male, ho perso questa possibilità. Mike, ricordati, internamente, questo è solo che chiama l'eseguibile git comunque; è solo la gestione un po 'per te. – Cascabel

1

Con Dulwich punta si dovrebbe essere in grado di fare:

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

questo è ancora molto semplice - esso copia attraverso gli oggetti e gli arbitri, ma non ha ancora creare il contenuto del albero di lavoro se si crea un repository non-nudo.

60

L'utilizzo di GitPython offre un'interfaccia Python valida per Git.

Ad esempio, dopo l'installazione (pip install gitpython), per clonare un nuovo repository è possibile utilizzare clone_from funzione:

from git import Repo 

Repo.clone_from(git_url, repo_dir) 

Nota: GitPython richiede git essere installato sul sistema, e accessibile tramite PATH del sistema .

+1

Non ha funzionato per me perché "pip install gitpython" non ha installato l'ultima build, invece ha installato 1.7 che non ha clone_from. Scusa per il downvote, my b :( – blented

+4

@blented Grazie per averlo menzionato, ma sfortunatamente è dovuto alla versione di GitPython (il 1.7 è troppo vecchio) In ogni caso, mi aspetto che chiunque veda questa domanda sia in grado di scoprire semplicemente do 'pip installa gitpython == 0.3.2.RC1', invece! –

+1

@AmirAliAkbari 0.3.2 RC1 è ora il candidato di installazione predefinito. – Kasisnu

4

di Github libgit2 vincolante, pygit2 fornisce una battuta clonazione una directory remota:

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

mia soluzione è molto semplice e diretto. Non ha nemmeno bisogno dell'inserimento manuale di parafrasi/password.

Ecco il mio codice 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" 
Problemi correlati