Python:为给定git存储库查找所有提交到其差异的映射

Python:为给定git存储库查找所有提交到其差异的映射,python,git,gitpython,Python,Git,Gitpython,我正在创建一个用于分析Git存储库的工具,但在一些应该(看起来)非常简单的事情上遇到了困难 我想创建提交到差异的映射(即,给定提交的实际blob更改逐行进行);我尝试过使用GitPython,但没有任何成功。我想实现这样的目标: def get_all_commits(REPO_URL): chromium_repo = Repo(REPO_URL) commits = list(chromium_repo.iter_commits()) commmit_diffs =

我正在创建一个用于分析Git存储库的工具,但在一些应该(看起来)非常简单的事情上遇到了困难

我想创建提交到差异的映射(即,给定提交的实际blob更改逐行进行);我尝试过使用GitPython,但没有任何成功。我想实现这样的目标:

def get_all_commits(REPO_URL):
    chromium_repo = Repo(REPO_URL)
    commits = list(chromium_repo.iter_commits())
    commmit_diffs = {}
    for commit in commits:
        diff = # get all blob changes for commit
        commit_diffs[commit.hexsha] = diff
    return commit_diffs
但我不确定如何获得给定提交的所有blob更改<代码>提交差异将采用以下形式:

{ 232d8f39bedc0fb64d15eed4f46d6202c75066b6 : '<String detailing all blob changes for given commit>' }
{232d8f39bedc0fb64d15eed4f46d6202c75066b6:''

任何帮助都会很好。

我不知道git diff命令。以下(我认为!)解决了这个问题:

def get_all_commits(REPO_URL):
    repo = Repo(REPO_URL)
    commits = list(repo.iter_commits())
    commmit_diffs = {}
    for index, commit in enumerate(commits):
        next_index = index + 1
        if next_index < len(commits):
            commit_diffs[commit.hexsha] = repo.git.diff(commits[next_index], commit)
    return commit_diffs
def get_all_提交(REPO_URL):
回购=回购(回购URL)
提交=列表(repo.iter\u提交())
commmit_diff={}
对于索引,在枚举中提交(提交):
下一个索引=索引+1
如果下一个索引
如果您提供了一些带有输出的示例代码,并描述输出应该如何不同,这将非常有用。看起来有办法,但也许它不能提供你所需要的?@LexScarisbrick这是我第一次使用这个库,所以我真的不知道从哪里开始;我已经添加了一个代码示例,让您了解到,由于chromium repo相当大,该代码可能会消耗您所有的RAM。话虽如此,您是否尝试过提交.diff()?@NilsWerner是的,我知道内存问题;是将存储在数据库中的一次性计算。是的,尽管diff对象不仅仅是整个树的散列吗?我怎样才能有效地发现两棵树之间的差异?正如你提到的,铬回购是巨大的;每次提交都要比较整个树似乎很可笑,除非我遗漏了什么