2010-03-18 164 views
36

有沒有使用子進程來克隆git倉庫的Python方式?我渴望使用你推薦的任何模塊。Python的方式克隆git倉庫

+3

gitpy,我想它會被稱爲 – SilentGhost 2010-03-18 18:58:06

+0

@SilentGhost:你的意思是*此* gitpy? http://github.com/vmalloc/gitpy from http://www.ryaari.com/blog/?p=9 – VonC 2010-03-18 19:01:15

+0

看起來像是GitPython(http://pypi.python.org/pypi/GitPython,http: //gitorious.org/git-python),我不認爲它有一個克隆方法,但我敢打賭你可以添加一個......但是在內部它將不得不調用'git clone'。 – Cascabel 2010-03-18 19:04:07

回答

19

http://gitorious.org/git-python/。在之前和內部沒有聽說過它,它依賴於git可執行文件的某處;另外,他們可能有很多bug。但它可能值得一試。

如何克隆:

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

(這不是很好,我不知道這是否是做它的支持方式,但它的工作)

+0

我不相信這個克隆。 – Cascabel 2010-03-18 19:05:39

+0

它的確如此。但它有點複雜。 – Debilski 2010-03-18 19:07:16

+1

哦,我的壞,我錯過了這種可能性。邁克,請記住,內部這只是調用git可執行文件;它只是爲你管理一點。 – Cascabel 2010-03-18 19:19:22

1

隨着德威提示你應該能夠做到:

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

這仍然是非常基本的 - 跨對象和裁判它複製,但是,如果你創建一個非純倉庫還沒有創建工作樹中的內容。

60

使用GitPython將爲您提供一個良好的Git Python接口。

例如,安裝它(pip install gitpython),用於克隆一個新庫後,您可以使用clone_from功能:注意

from git import Repo 

Repo.clone_from(git_url, repo_dir) 

GitPython需要混帳被安裝在系統上,而且您可以通過系統的PATH 。

+1

沒有爲我工作,因爲「pip安裝gitpython」沒有安裝最新的版本,而是安裝了1.7,它沒有clone_from。對不起,我的b :( – blented 2014-06-03 16:32:30

+4

@blented感謝提及,但不幸的是它由於GitPython版本化(1.7太舊) 無論如何,我希望任何人看到這個問題能夠找到簡單而不是'pip安裝gitpython == 0.3.2.RC1'! – 2014-06-04 10:05:19

+1

@AmirAliAkbari 0.3.2 RC1現在是默認安裝候選者。 – Kasisnu 2014-10-06 04:12:35

4

GitHub的libgit2結合,pygit2提供一個班輪克隆遠程目錄:

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

我的解決方案是非常簡單和直接的。它甚至不需要手動輸入釋義/密碼。

這裏是我的完整代碼:

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"