【发布时间】:2017-11-30 07:12:56
【问题描述】:
给定一系列提交,比如 HEAD~1 和 HEAD(即,只是 HEAD),我想找到在该范围内更改的行的
更准确地说:对于范围内更改的每一行,我想获取以前的作者(例如,使用git blame)。然后我想按这些作者总结更改的行进行分组。
例如,考虑HEAD之前这些人更改的文件X(我在行首标记了更改行的人,与git blame的输出相当):
Adam: Lorem ipsum dolor
Adam: sit amet, consectetur
Adam: adipiscing elit.
Bob: Praesent efficitur urna
Bob: ac volutpat lacinia.
Bob: Sed sagittis, metus non
Adam: maximus tristique, leo
Adam: augue venenatis enim,
Adam: ac rutrum nulla odio
Adam: id urna.
现在,作者Carl 将文件更改如下(注意这是git blame 和git diff 的伪代码混合):
Adam: Lorem ipsum dolor
Adam: sit amet, consectetur
- Adam: adipiscing elit.
+ Carl: adipiscing elit I love cats.
- Bob: Praesent efficitur urna
+ Carl: Praesent efficitur urna :D
- Bob: ac volutpat lacinia.
+ Carl: ac volutpat lacinia YOLO.
+ Carl: Added extra line, lol!
- Bob: Sed sagittis, metus non
Adam: maximus tristique, leo
Adam: augue venenatis enim,
Adam: ac rutrum nulla odio
Adam: id urna.
因此,Carl 更改了 Bob 的 2 行,删除了 Bob 的 1 行,并更改了 Adam 的 1 行。因此,我的脚本的输出应该是:
鲍勃:3 亚当:1
我的整体解决方案是:
- 查找更改的行范围
- 将这些范围与
-L参数传递给git blame以查询以前的作者 - 通过解析
git blames 的输出并进行总结,自己进行最后的分组。
我目前正在努力解决 1.: 获取由 diff 更改的行范围(在本例中为一个范围 3,6)。一旦我有了这些范围,我可以将它们传递给git blame -L 以获取这些行的先前作者。 那么如何让 git diff 或其他 git 工具将行范围作为数字 start,end 对返回?
【问题讨论】:
标签: git scripting git-diff git-blame