在Python代码中使用Git命令

时间:2012-06-20 06:23:18

标签: python git

我被要求编写一个脚本,从Git中提取最新代码,进行构建,并执行一些自动单元测试。

我发现有两个内置的Python模块可以与Git交互,这些模块随时可用:GitPythonlibgit2

我应该使用哪种方法/模块?

6 个答案:

答案 0 :(得分:21)

更简单的解决方案是使用Python subprocess模块来调用git。在您的情况下,这将提取最新的代码并构建:

import subprocess
subprocess.call(["git", "pull"])
subprocess.call(["make"])
subprocess.call(["make", "test"])

文档:

答案 1 :(得分:12)

我同意Ian Wetherbee的观点。您应该使用subprocess直接调用git。如果需要在命令输出上执行某些逻辑,那么您将使用以下子进程调用格式。

import subprocess
PIPE = subprocess.PIPE
branch = 'my_branch'

process = subprocess.Popen(['git', 'pull', branch], stdout=PIPE, stderr=PIPE)
stdoutput, stderroutput = process.communicate()

if 'fatal' in stdoutput:
    # Handle error case
else:
    # Success!

答案 2 :(得分:3)

EasyBuild中,我们依赖于GitPython,而且效果很好。

有关如何使用它的示例,请参阅here

答案 3 :(得分:1)

因此,在Python 3.5和更高版本中,不建议使用.call()方法。

https://docs.python.org/3.6/library/subprocess.html#older-high-level-api

当前推荐的方法是在子进程上使用.run()方法。

import subprocess
subprocess.run(["git", "pull"])
subprocess.run(["make"])
subprocess.run(["make", "test"])

在我阅读文档时添加了此内容,以上链接与公认的答案相矛盾,因此我必须进行一些研究。再加上我的2美分,希望可以节省一些时间。

答案 4 :(得分:0)

如果GitPython软件包对您不起作用,则还有PyGit和Dulwich软件包。这些可以通过pip轻松安装。

但是,我个人只是使​​用了子流程调用。完美满足我的需求,这只是基本的git调用。对于更高级的内容,我建议使用git包。

答案 5 :(得分:-5)

如果您使用的是Linux或Mac,为什么要使用python来完成此任务?写一个shell脚本。

#!/bin/sh
set -e
git pull
make
./your_test #change this line to actually launch the thing that does your test