根据差异,我不理解git log -p
的输出与gitpython
的输出之间的区别。
例如,对于某些合并提交f534e1...
,git log -p
给出:
commit f534e1...
Merge: ....
Author: ....
Date: ...
Merge pull request ... from ...
使用无差异,我认为这是正确的(差异来自下一个日志条目 - f534e1...
的父亲之一)。
我希望与gitpython
达到同样的效果。我在尝试:
repo = Repo("...")
for c in repo.iter_commits():
print c.hexsha
print c.summary
print c.diff()
我明白了:
f534e1...
Merge pull request ... from ...
[<git.diff.Diff object at 0x102cd3490>]
some diff 。
这有什么区别?为什么我在这里拿到它?我如何模仿git log -p
的行为?
答案 0 :(得分:0)
根据documentation,c.diff()
会将提交与索引进行比较,即分阶段更改。
git log -p
似乎会针对所有给定提交的父母产生特殊格式的差异。使用以下代码(基于您的示例)可以实现大致可比较的东西。
repo = Repo("...")
for c in repo.iter_commits():
print c.hexsha
print c.summary
for p in c.parents:
handle_diff(c.diff(p))
后者将产生一个包含所有相关信息的Diff对象。
如果您真正想要的是git log -p
生成的确切格式,您也可以调用repo.git.log(p=True)
并自行解析输出。