从Python进行Git提交
我想用Python写一个模块(这是我的学习项目),来提升我使用git的体验。有没有什么Python模块可以用来执行各种git命令?至少是一些基本的命令,比如提交(commit)、差异(diff)、日志(log)和添加(add)?
我看到有一个叫GitPython的东西,但我找不到支持(新)提交的功能;它更像是一个浏览代码库的框架,而不是一个完整的GIT接口。(还是我漏掉什么了?)
另外,如果确实有一个Python模块可以做到这些,那用这个模块会更好,还是直接在Python代码中执行shell命令更方便呢?
4 个回答
10
Git的设计分为“管道”和“瓷器”两部分。“管道”是基础的低级系统,负责管理对象、仓库、远程等。而“瓷器”则是更友好的高级工具,它们利用了“管道”的功能。
历史上,只有最基本和性能关键的部分(主要是“管道”)是用C语言实现的,其余的部分则使用了shell或perl脚本。为了让代码更具可移植性,越来越多的代码被重写成C语言。
在这个背景下,我建议你在Python中调用git可执行文件的系统命令。可以把你的代码看作是Git的“瓷器”部分。相比于使用专门的库,使用系统调用有以下优缺点:
优点
- 不需要学习新的API——可以直接使用你熟悉的
git
命令 - 工具齐全——可以使用“瓷器”,不局限于低级功能
缺点
- 需要解析
git
命令的命令行输出 - 可能会比较慢
15
我觉得一些Python的源代码可以帮助像我这样的初学者,避免在查找文档上浪费宝贵的时间。
所有的提交都会发送到新创建的 origin master
分支上。
下面是代码:
from git import Repo
import os
path = '/your/path/here'
if not os.path.exists(path):
os.makedirs(path)
os.chdir(path)
repo = Repo.init(path).git
index = Repo.init(path).index
for x in xrange (1,10):
fname = 'filename' + str(x)
f.open(fname, 'wb+')
f.write()
f.close()
repo.add(fname)
index.commit("initial commit")
15
在GitPython中,你可以通过一个叫做索引对象的东西来创建一个提交。
而在libgit2中,你则是通过一个叫做仓库对象的东西来创建提交。
你可能还想看看这个问题: