23

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

我发现有两个现成的用于与 Git 交互的内置 Python 模块:GitPythonlibgit2.

我应该使用什么方法/模块?

4

6 回答 6

41

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

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

文件:

于 2012-06-20T06:33:24.223 回答
21

我同意伊恩·韦瑟比的观点。您应该使用 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!
于 2012-06-20T08:37:16.263 回答
16

因此,在 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 美分,希望能为别人节省一点时间。

于 2019-10-22T20:41:47.830 回答
3

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

有关如何使用它的示例,请参见此处。

于 2012-06-20T08:38:22.317 回答
1

如果 GitPython 包不适合你,还有 PyGit 和 Dulwich 包。这些可以通过 pip 轻松安装。

但是,我个人只是使​​用了子流程调用。非常适合我需要的东西,这只是基本的 git 调用。对于更高级的东西,我推荐一个 git 包。

于 2019-11-21T20:11:23.753 回答
-8

如果您在 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
于 2012-06-20T06:53:04.780 回答