在Python中运行Git克隆命令

5

我对Python和Git都很陌生。我正在编写一个Python脚本,需要执行与在Linux服务器上从我的工作区(即/local/mnt/workspace/)运行下面的git命令相同的操作。

git clone git://git.xyz.com/platform/manifest.git -b jb_2.5

我尝试使用Fab库,但是由于fabric.api模块没有安装,所以无法继续进行。 另外,

import git
git.Git().clone("git://git.xyz.com/platform/manifest.git") 

无法正常工作。

还有其他解决方案吗?


1
“不起作用”是什么意思?它会出现错误吗?如果是,是哪一行代码出错了,有什么回溯信息?还是只是返回但没有任何操作,或者做了错误的事情?或者其他情况?同时,“无法继续”是什么意思?你不知道如何安装fabric.api,还是不想安装?为什么一开始你认为需要它呢? - abarnert
我认为,在git模块中,Repo对象将提供克隆现有存储库的方法。因此,您可能想尝试使用 - git.Repo().clone()。参考 - https://pythonhosted.org/GitPython/0.3.2/tutorial.html - Sumod
这个回答解决了你的问题吗?在Python代码中使用Git命令 - user202729
3个回答

17
你可以定义一个git函数,允许你调用git命令。出于安全考虑,限制用户只能使用git命令非常重要;否则,要求git url并使用其他技术可能会导致数据丢失或其他恶意攻击。
import subprocess

def git(*args):
    return subprocess.check_call(['git'] + list(args))

# examples
git("status")
git("clone", "git://git.xyz.com/platform/manifest.git", "-b", "jb_2.5")

将其改为subprocess.check_output可使您看到git打印的输出,而不是确定成功(例如,如果您不在git存储库中,则git("status")会引发异常)。

顺便提一下:看看 PIP,它旨在帮助安装常用软件包。


1
你真的不想尝试定义一个 git 函数,它试图模拟他想使用的模块的 API。 - abarnert
当发出交互式命令(如 git commit)时,它会如何表现? - Throoze
@Throoze,git总是提供一种无需交互命令的方法来完成某些操作。例如:git("commit", "-m", "我的提交信息") - Brigand
@FakeRainBrigand 谢谢你的回答,但我的问题更像是在使用子进程时控制权会发生什么。它如何处理标准输入和后台/前台进程?谢谢 :) - Throoze
试试看,我不知道。 - Brigand

3

您可以通过 os.systemsubprocess 进行命令行操作,也可以使用GitPython包。


1
由于你没有展示错误信息,仅仅说“不行”,所以很难猜测到底是什么问题。
但我猜测问题出在 import git 报了一个 ImportError,因为你从未安装过你试图使用的 git 模块。
如果是这样,那么告诉你如何执行 git.Git().clone("git://git.xyz.com/platform/manifest.git") 的同一份自述文件也会告诉你如何安装它。
但最有可能的是,你只需要像 pip install pygit2pip install GitPython 这样的东西。 (你可能需要 sudo,并且在使用之前可能需要安装 pip 等等,但由于我们对你的平台或知识水平一无所知,所以无法猜测你确切需要什么。)

我使用subprocess和Popen成功地让我的Python脚本工作了。 - user1429246

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接