2010-03-18 131 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"