gitpython 的差异和 git 日志的差异有什么区别?
What's the difference between gitpython's diff and git log's diff?
我不明白 git log -p
和 gitpython
的输出之间的差异。
例如,对于某些合并提交 f534e1...
,git log -p
给出:
commit f534e1...
Merge: ....
Author: ....
Date: ...
Merge pull request ... from ...
with no 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
的行为?
根据 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)
并自己解析输出。
我不明白 git log -p
和 gitpython
的输出之间的差异。
例如,对于某些合并提交 f534e1...
,git log -p
给出:
commit f534e1...
Merge: ....
Author: ....
Date: ...
Merge pull request ... from ...
with no 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
的行为?
根据 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)
并自己解析输出。