gitPython优于使用子进程执行git命令的优势?

时间:2014-03-08 11:13:40

标签: python subprocess gitpython

我最近使用python执行git命令,使用subproces.Popen执行git命令,所以我在争论是否利用gitPython模块?如果使用gitpython模块会有什么不同吗?

3 个答案:

答案 0 :(得分:2)

对我来说,GitPython有很多优点。在我看来,最重要的是命令的结果是Python对象,因此您可以使用类型属性和方法来执行和接收对象。这样可以在面对意外情况时获得更好的结果,例如 - 没有遥控器,分支名称与您的想法不同,等等。

repo = git.Repo('/home/user/my_project')
print(repo.branches)

从上面的例子可以看出,你可以迭代一些命令,比如遥控器,分支。

for branch in repo.branches:
    print(branch)

使用原始命令行,这些事情真的很麻烦。

并且,我认为GitPython比gittle更完整地支持git功能,例如:子模块支持。

答案 1 :(得分:1)

使用子进程模块更容易实现。似乎需要更多时间才能让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 Module experiences?

答案 2 :(得分:1)

IMO这是一般问题的一个特定版本,"我想要的东西已经存在,我应该从头开始再写一次吗?"答案几乎总是没有*。

我还要说,对于那个在写这个问题的时候看过GitPython的人(即2015年4月的1.0.0发布之前),你应该再看一遍,这个项目已经做了很多最近的进展。

GitPython是:

  • 一个开源的社区项目
  • git的Pythonic界面
  • 使用自动化单元测试进行了充分测试
  • 被数百或数千人使用,这意味着错误的识别速度比您自己编写的代码快得多
  • 真正了解git
  • 的人维护
  • 由您以外的其他人撰写,因此您可以专注于您实际想要做的事情 git
  • 非常善于处理拉取请求,所以如果有什么东西丢失而你需要,欢迎你加入
  • 根据BSD许可证获得许可,因此如果您的项目是针对非开源友好型公司的,那么您不会有GPL或更具侵略性的Copyleft许可证所带来的问题

*是的,有些理由说明为什么自己写一些东西是必要的,无论他们是合法的还是办公室政治还是NIH syndrome。我说所有这些都是边缘情况。