提问人:Jason C 提问时间:12/10/2022 最后编辑:Jason C 更新时间:12/11/2022 访问量:114
一次性获取给定文件的完整责备历史记录
Getting full blame history all at once for a given file
问:
我正在开发一个程序,该程序可以分析一段时间内的 git blame 历史记录,从给定文件的第一次提交开始,一直到 HEAD,沿着给定的分支。
目前,我的做法是:
- 用于获取分支上每个提交的列表。
git log --pretty='%H %ad' --date=unix <branch>
- 对于该列表中的每个提交,分别使用和分析结果。
git blame --date=unix --minimal -l -e -w <commit> <filename>
问题是这需要很长时间。另外,我实际上是在多个存储库中对存储库中的每个文件执行此操作。因此,对于给定的 repo 来说,最坏的情况是我认为它类似于 O(number_of_files * number_of_commits)。大量时间被生成过程占用。对于一个只有几十个文件和几百个提交的小型存储库,它需要将近 3 分钟(运行大约 16,000 次),并且它已经完全并行化。git
git
我的问题是,有没有办法在单个命令中获取对给定文件(虽然一次仍然是一个文件)的每次更改的完整责备历史记录(例如,如果一行在多次提交中多次更改),这样我就可以减少这花费的时间?我想将其减少到 O(number_of_files)。这是我的第一个优化目标,我只是还没有弄清楚是否有办法做到这一点。git
我查看了输出,但是,除非我误读了(我没有做适当的比较,所以我在这里可能是错的),它仍然只归咎于最近的变化,而不是一次发生所有变化。git blame --incremental
是否有可能这样做,如果可以,如何做?
答: 暂无答案
上一个:给定整数的存储桶预测?
下一个:使用数学表达式修改文本文件
评论
git log --graph --patch -- the-file
--graph
git log <given branch>
git log --graph