有没有办法自定义git blame的输出?

Ren*_*soo 47 git blame

git log有一个很好的--format选项来指定如何格式化输出.

git blame似乎没有相应的,虽然默认输出blame不是很人性化.我希望看到更少.

例如,而不是:

5600cab7 js/sidebar/VehicleGrid.js        (Rene Saarsoo    2009-10-08 18:55:24 +0000 127)    if (x > y) {
b5f1040c js/map/monitoring/VehicleGrid.js (Mihkel Muhkel   2010-05-31 07:20:13 +0000 128)        return x;
Run Code Online (Sandbox Code Playgroud)

我想拥有:

5600cab7 Rene Saarsoo (1 year ago)     127:    if (x > y) {
b5f1040c Mihkel Muhkel (5 months ago)  128:        return x;
Run Code Online (Sandbox Code Playgroud)

我认为我可以编写一个脚本来解析输出,git blame --porcelain但是考虑到可怕的默认输出,blame我觉得有人在那里已经做了一些事情.

有任何想法吗?或者实现这样一个脚本的任何提示?

编辑:通过编写小脚本解决它.

Jak*_*ski 18

您可以使用备用输出格式:git annotategit blame -c.

您可以使用--date=<format>选项(或blame.date配置变量)更改日期的格式,其中<format>包括relative,local,default,iso,rfc,short.有关详细信息,请参阅git-blamegit-log联机帮助页.


Von*_*onC 7

更新Git 2.18(2018年第二季度):" git blame"学会在与前一个相同的行上取消来自原始提交的不感兴趣的元数据,并根据提交的年龄绘制不同颜色的行.

请参阅Stefan Beller()提交0dc95a4,提交25d5f52,提交cdc2d5f(2018年4月24日).(由Junio C Hamano合并- -提交3d24129,2018年5月30日)stefanbeller
gitster

builtin/blame:添加新的着色方案配置

添加一个配置选项,允许选择blame的默认颜色方案.命令行仍然优先于配置.

git config 现在报道:

blame.coloring::
Run Code Online (Sandbox Code Playgroud)

这确定了应用于非责任输出的着色方案.
它可以是' repeatedLines',' highlightRecent'或' none',这是默认值.


builtin/blame:突出显示最近改变的线条

为日期选择不同的颜色,并根据年龄模仿"温度降温".

与之前的补丁类似,这提供了命令行选项' --color-by-age'以启用此模式,并使用配置选项' color.blame.highlightrecent'来选择颜色.

文档现在添加:

color.blame.highlightRecent
Run Code Online (Sandbox Code Playgroud)

这可用于根据线的年龄为责备线的元数据着色.

此设置应设置为以逗号分隔的颜色和日期设置列表,以颜色开始和结束,日期应设置为从最旧到最新.
如果在给定时间戳之前引入该行,则元数据将根据颜色着色,覆盖较旧的带时间戳的颜色.

而不是绝对时间戳相对时间戳也起作用,例如2.weeks.ago可用于处理超过2周的任何事件.

它默认为' blue,12 month ago,white,1 month ago,red',它将一年级以上的所有颜色设置为蓝色,一个月和一年之间的最近变化保持白色,上个月引入的线条颜色为红色.


builtin/blame:昏暗无趣的元数据行

使用时git-blame,许多行包含冗余信息,例如在由多行组成的数据库中,重复元数据(提交名称,作者,日期).
读者可能对这些不感兴趣,因此提供一种选项,以不同方式对从前一行重复的信息着色.
传统上,我们将CYAN用于不像其他人那样有趣的行(例如,hunk header),所以请继续使用.

命令行选项' --color-lines'将触发重复行的着色,并color.blame.colorLines提供配置选项' '以选择颜色.
设置配置选项并不意味着重复的线条是彩色的.


原答案2010

考虑到像Trac或Redmine这样的Web界面集成了git blame结果,我想这样的解析已经完成了.

您可以在此Redmine Defect 3832中看到这个ruby脚本的示例:


Gda*_*lya 7

对我来说,-s标志是可行的,因为我需要的只是SHA1 ID,之后我查找提交以获取详细信息.一个脚本肯定看起来有点矫枉过正.一年前-s标志是否可能无法使用?


Uly*_* BN 7

进一步使用VonC 的出色回答,我为color.blame.highlightRecent配置做了一个更完整的规模:

[color "blame"]
    highlightRecent = 237, 20 month ago, 238, 19 month ago, 239, 18 month ago, 240, 17 month ago, 241, 16 month ago, 242, 15 month ago, 243, 14 month ago, 244, 13 month ago, 245, 12 month ago, 246, 11 month ago, 247, 10 month ago, 248, 9 month ago, 249, 8 month ago, 250, 7 month ago, 251, 6 month ago, 252, 5 month ago, 253, 4 month ago, 254, 3 month ago, 231, 2 month ago, 230, 1 month ago, 229, 3 weeks ago, 228, 2 weeks ago, 227, 1 week ago, 226
Run Code Online (Sandbox Code Playgroud)

从 20 个月前到现在(过去 4 周用不同颜色)的比例:

如果您改进了它,请评论要点!喜欢的话就加星吧??