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

时间:2010-10-18 12:13:00

标签: 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;

我想:

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

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

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

编辑:撰写small script解决此问题。

6 个答案:

答案 0 :(得分:18)

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

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

答案 1 :(得分:7)

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

答案 2 :(得分:6)

更新Git 2.18(2018年第二季度):“git blame”学会在原始提交中取消强调不感兴趣的元数据,这些元素与前一行相同,并且还会根据年龄不同颜色绘制不同颜色的线条。 提交。

commit 0dc95a4commit 25d5f52commit cdc2d5fStefan Beller (stefanbeller)(2018年4月24日)。{
(由Junio C Hamano -- gitster --合并于commit 3d24129,2018年5月30日)

  

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

     

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

git config现在报道:

blame.coloring::
     

这决定了应用于非责任输出的着色方案   它可以是“repeatedLines”,“highlightRecent”或“none”,这是默认设置。


  

builtin / blame:突出显示最近更改的行

     

为日期选择不同的颜色并模仿'温度降温'   取决于年龄。

     

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

The documentation现在添加:

color.blame.highlightRecent
     

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

     

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

而不是绝对时间戳相对时间戳也起作用,例如 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脚本的示例:

答案 3 :(得分:5)

进一步使用 VonC's great answer,我为 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

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

如果您改进了,请评论the gist!喜欢的话就点个星吧❤️

答案 4 :(得分:0)

由于git log为输出提供了更多的自定义选项,因此您可以结合使用git blameawkxargsgit log来实现所需的功能。例如

git --no-pager blame <filepath> -L1,+1 --porcelain | awk 'NR==1 {print $1}' | xargs git --no-pager log -1 --pretty=format:"%h - (%cd) %s - %an" --date=relative

这将输出如下内容:

f8a66e80c - (5 months ago) Add gem: devise - elquimista

git blameawk上面所做的基本上是获得完全提交SHA,然后xargs将其作为参数传递给git log

答案 5 :(得分:0)

您可以将其添加到.gitconfig中以获取相对时间(n天前,等等)

[blame]
    date = human