Python Git模块的经验?
大家对Python的Git模块有什么经验吗?(我知道有GitPython、PyGit和Dulwich,如果你知道其他的也可以提出来。)
我正在写一个程序,需要和Git仓库进行交互(比如添加、删除、提交),但我对Git没有经验,所以我希望能找到一些使用起来简单易懂的工具。
我主要关心的还有库的成熟度和完整性、bug的数量、是否持续更新,以及文档和开发者的帮助程度。
如果你想到其他我可能需要了解的内容,请随时告诉我。
11 个回答
虽然这个问题问的时间有点久,我也不知道当时那些库的情况,但我觉得值得告诉大家的是,GitPython这个库在使用上做得很好,它把命令行工具给封装起来了,这样你就不需要用到subprocess这个东西了。里面有一些很实用的封装可以直接用,但如果你想做其他事情,可以像这样操作:
import git
repo = git.Repo( '/home/me/repodir' )
print repo.git.status()
# checkout and track a remote branch
print repo.git.checkout( 'origin/somebranch', b='somebranch' )
# add a file
print repo.git.add( 'somefile' )
# commit
print repo.git.commit( m='my commit message' )
# now we are one commit ahead
print repo.git.status()
GitPython的其他功能让你在使用上更方便。我对这个库的表现相当满意,也很感激它能在底层的git工具上做了封装。
更新:我现在不仅在用git,还在用sh模块来处理我在Python中需要的大多数命令行工具。要实现上面的功能,我会这样做:
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()
我想自己回答一下这个问题,因为我选择的方式和大家建议的不太一样。不过还是要感谢那些回答的人。
首先,我简单说一下我使用GitPython、PyGit和Dulwich的经历:
- GitPython:下载后,我成功导入了这个库,并初始化了相应的对象。但是,按照教程上的建议去做时却出现了错误。因为缺乏更多的文档,我决定去找其他的解决方案。
- PyGit:这个库根本无法导入,而且我找不到任何文档。
- Dulwich:这个看起来最有希望(至少是我想要的功能)。我在使用它时进展比GitPython要多,因为它的安装包里有Python的源代码。不过,过了一段时间,我觉得尝试我自己的方法可能会更简单。
另外,StGit看起来也很有趣,但我需要把它的功能提取到一个单独的模块里,而我现在不想等这个过程。
在我花费的时间远远少于尝试让上面三个模块工作的时间里,我通过subprocess模块成功运行了git命令,比如:
def gitAdd(fileName, repoDir):
cmd = ['git', 'add', fileName]
p = subprocess.Popen(cmd, cwd=repoDir)
p.wait()
gitAdd('exampleFile.txt', '/usr/local/example_git_repo_dir')
这部分还没有完全整合到我的程序里,但我不担心会有问题,除了可能速度会慢一些(因为有时候我需要处理成百上千的文件)。
也许我只是没有耐心去搞定Dulwich或GitPython。话虽如此,我还是希望这些模块能得到更多的开发,变得更加实用。