我最近使用执行 git 命令的 python 做了一个 git 命令,subproces.Popen
所以我正在争论是否要利用gitPython
模块?如果gitpython
使用模块有什么不同吗?
3 回答
使用 subprocess 模块更容易开始工作。让 gitPython 工作似乎需要更多时间。根据您的项目,使用子流程可能更容易。如果您正在考虑采用子流程路线,那么 sh 也值得一试。http://amoffat.github.io/sh/ sh 允许您像调用函数一样调用程序。另外,您是否查看过https://github.com/FriendCode/gittle - 如果您只是想自动化 Git 命令,那可能会很好。
前任:
import sh
git = sh.git.bake(_cwd='/home/me/repodir')
print git.status()
# checkout and track a remote branch
print git.checkout('-b', 'somebranch')
# add a file
print git.add('somefile')
# commit
print git.commit(m='my commit message')
# now we are one commit ahead
print git.status()
更多信息:Python Git 模块体验?
对我来说,GitPython 有很多优点。在我看来,最重要的是命令的结果是 Python 对象,因此您执行并接收具有类型属性和方法的对象。面对意外情况,这可以为您提供更好的结果,例如 - 没有遥控器,分支名称与您想象的不同等。
repo = git.Repo('/home/user/my_project')
print(repo.branches)
从上面的例子可以看出,您可以迭代远程、分支等命令的结果。
for branch in repo.branches:
print(branch)
使用原始命令行,这些事情很快就会变得非常麻烦。
而且,我认为 GitPython 对 git 功能的支持比 gittle 更完整,例如子模块支持。
IMO 这是通用问题的一个特定版本,“我想要的东西已经存在,我应该自己从头开始写一遍吗?” 答案几乎总是否定的*。
我还要说,对于在写这个问题时(即在 2015 年 4 月 1.0.0 版本之前)看过 GitPython 的任何人,你应该再看一遍,该项目最近取得了很大进展。
GitPython 是:
- 一个开源的社区项目
- 一个 Pythonic 的 git 接口
- 经过自动化单元测试的良好测试
- 被数百或数千人使用,这意味着比您自己编写的代码更快地识别错误
- 由真正懂 git的人维护
- 由您以外的其他人编写,因此您可以专注于您真正想用git做什么
- 非常擅长处理拉取请求,所以如果缺少某些东西并且您需要,欢迎您添加它
- 在 BSD 许可下获得许可,因此如果您的项目是针对非开源友好型公司的,那么您不必担心 GPL 或更激进的 copyleft 许可带来的问题
* 是的,有一些理由让你自己写东西是必要的,无论是法律还是办公室政治,或者仅仅是NIH 综合症。我会说所有这些都是边缘情况。