在 git-python 中通过 hexsha 获取 Commit 对象

Get Commit object by hexsha in git-python

我正在尝试查找两次特定提交之间已签入的提交的内容。

在 git 我会做 git rev-list --ancestry-path <older_commit_sha>..<newer_commit_sha>

在 git-python 中,由于看起来没有直接的方法,我求助于通过 repo.git.execute() 调用确切的命令。 输出是一串提交 ID(十六进制 SHA)。

现在,在 git-python 中有没有一种方法可以从 execute() 给出的十六进制 SHA 开始创建一个有效的 Commit 对象?

经过多次探索,鉴于这个问题没有引起太大关注,我求助于 .execute()。 具体来说:

commits = repo.git.execute(['git', 'rev-list', '--ancestry-path',
                            '%s..%s' % (oldCommit.hexsha, newCommit.hexsha)]).split()

当然,oldCommitnewCommitgit.Commit个对象。

我没有在git-python中找到一个函数来通过sha获取特定的提交对象。 所以我只能想迭代所有的提交来得到它:

def get_commit_by_sha(repo, sha):
    for c in r.iter_commits():
        if c.hexsha == last_one:
            return c
    return None

至于比较两个提交特定提交之间的差异。 diff方法很有用,简单用法:

old_commit.diff(new_comit.hexsha)

结果是一个git.diff.DiffIndex对象,参考https://gitpython.readthedocs.io/en/stable/reference.html#git.diff.DiffIndex