什么是gitpython的差异和git log的差异之间的区别?

时间:2015-04-08 23:43:49

标签: git github gitpython

根据差异,我不理解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的行为?

1 个答案:

答案 0 :(得分:0)

根据documentationc.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)并自行解析输出。