1

我不明白 diff 的输出git log -pgitpythondiff 的输出之间的区别。

例如,对于某些合并提交f534e1...git log -p给出:

commit f534e1...
Merge: ....
Author: ....
Date:   ...

Merge pull request ... from ...

没有diff,我认为这是正确的( diff 带有下一个日志条目 - 的父母之一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>]

一些差异

这是什么区别?为什么我会在这里得到它?我怎样才能模仿 的行为git log -p

4

1 回答 1

2

根据文档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)自己调用和解析输出。

于 2015-04-09T06:27:35.653 回答