gitpython git diff_获取GitPython中第一次提交的差异细节

Git

Python中,我可以通过调用不同提交对象之间的diff()方法分别迭代树中每个更改的diff信息.如果我使用create_patch = True关键字参数调用diff(),则会为每个我可以通过创建的diff对象访问的更改(添加,删除,重命名)创建一个补丁字符串,并解析更改.

但是,我没有父级与第一次提交进行比较.

import git

from git.compat import defenc

repo = git.Repo("path_to_my_repo")

commits = list(repo.iter_commits('master'))

commits.reverse()

for i in commits:

if not i.parents:

# First commit, don't know what to do

continue

else:

# Has a parent

diff = i.diff(i.parents[0], create_patch=True)

for k in diff:

try:

# Get the patch message

msg = k.diff.decode(defenc)

print(msg)

except UnicodeDecodeError:

continue

您可以使用该方法

diff = repo.git.diff_tree(i.hexsha, '--', root=True)

但是这会使用给定的参数调用整个树上的git diff,返回一个字符串,我无法分别获取每个文件的信息.

也许,有一种方法可以创建一些种类的根对象.如何在存储库中获得第一个更改?

编辑

一个肮脏的解决方法似乎是通过直接使用its hash与空树进行比较:

EMPTY_TREE_SHA = "4b825dc642cb6eb9a060e54bf8d69288fbee4904"

....

if not i.parents:

diff = i.diff(EMPTY_TREE_SHA, create_patch=True, **diffArgs)

else:

diff = i.diff(i.parents[0], create_patch=True, **diffArgs)

但这似乎不是一个真正的解决方案.其他答案仍然欢迎.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值