如何使用图形在 git 日志中进行对齐

Nov*_*e C 4 git

使用类似git log --abbrev-commit --pretty=format:'%h %<(72,trunc)%s %d',您可以获得带有图形的相当对齐的 git commit 消息。如果您删除该--graph选项,它将完全对齐。这是命令的大致样子

*   40f1481 Commit title message        (HEAD, dev)
|\                                                                     
| * 9b5122d Commit title message        (debug)
| * fe7ddfe Commit title message               
| * 8e4d414 Commit title message      
| * 53affdd Commit title message    
| * a45fbaf Commit title message             
|/                                                                     
* 36b23c3 Commit title message                     
* 5b7bfe1 Commit title message        (master)
Run Code Online (Sandbox Code Playgroud)

问题在于图形符号的对齐方式混乱,正如您在前两次提交中看到的那样。这是理想情况下的样子

*   40f1481 Commit title message        (HEAD, dev)
|\                                                                     
| * 9b5122d Commit title message        (debug)
| * fe7ddfe Commit title message               
| * 8e4d414 Commit title message      
| * 53affdd Commit title message    
| * a45fbaf Commit title message             
|/                                                                     
*   36b23c3 Commit title message                     
*   5b7bfe1 Commit title message        (master)
Run Code Online (Sandbox Code Playgroud)

我的问题是在使用绘图选项时是否有获得正确对齐的选项?或者获取图形的宽度以便您可以相应地填充日志?


我知道一个快速的 hack 是通过 tab (%x09) 填充第一个选项,它应该适用于大多数项目,但我想知道它们是否是一个美观的、万无一失的选项,可以通过最少的填充来实现但也适用于 5 不够的情况。这是选项卡解决方案失败的示例

在此处输入图片说明


使用列记录,没有彩色图表。

在此处输入图片说明


圆满成功!稍后会尝试更新。

在此处输入图片说明

小智 8

现代版本的 Git(我在 cygwin 环境中有 git 2.17.0)可以很好地处理彩色图形和缩进,无需任何额外的工具或脚本。

我的.gitconfig别名部分:

[alias]
    l   = log --graph --abbrev-commit --decorate=no --date=format:'%Y-%m-%d %H:%I:%S' --format=format:'%C(03)%>|(26)%h%C(reset)  %C(04)%ad%C(reset)  %C(green)%<(16,trunc)%an%C(reset)  %C(bold 1)%d%C(reset) %C(bold 0)%>|(1)%s%C(reset)' --all
Run Code Online (Sandbox Code Playgroud)

我已经在 django 官方存储库上对其进行了测试,效果很好


Von*_*onC 3

我见过的最接近的git log正确对齐是在garybernhardt/dotfiles/.githelpers.

加里使用:

  • 带有特殊分隔符“}”的自定义格式
  • Linux命令column

我在repo git 的克隆中进行了测试:

vonc@VONCAVN7:~/gits/src/git$ 
git -c color.ui=auto log --graph --pretty=tformat:"%C(yellow)%h%Creset}%Cgreen(%ar)%Creset}%C(bold blue)<%an>%Creset}%C(bold red)%d%Creset %s" -100|  column -s '}' -t
Run Code Online (Sandbox Code Playgroud)

在多行中:

git -c color.ui=auto log --graph \
  --pretty=tformat:"%C(yellow)%h%Creset}%Cgreen(%ar)%Creset}%C(bold blue)<%an>%Creset}%C(bold red)%d%Creset %s" \
  -100|  column -s '}' -t
Run Code Online (Sandbox Code Playgroud)

但是:它仅适用于 color.ui 设置为 false 或 auto 的情况,而不是设置为始终:颜色会弄乱列对齐。

没有颜色:

* 238e487ea                    (3 weeks ago)  <Junio C Hamano>         (HEAD -> master, tag: v2.14.1-b5, origin/master, origin/HEAD) The fifth batch post 2.14
*   6e6ba65a7                  (3 weeks ago)  <Junio C Hamano>         Merge branch 'mg/killed-merge'
|\
| * 9d89b3552                  (3 weeks ago)  <Michael J Gruber>       merge: save merge state earlier
| * 8e6a6bb36                  (3 weeks ago)  <Michael J Gruber>       merge: split write_merge_state in two
| * 62dc42b93                  (3 weeks ago)  <Michael J Gruber>       merge: clarify call chain
| * e2de82f27                  (4 weeks ago)  <Michael J Gruber>       Documentation/git-merge: explain --continue
* |   eabdcd4ab                (3 weeks ago)  <Junio C Hamano>         Merge branch 'jt/packmigrate'
|\ \
| * | 7709f468f                (4 weeks ago)  <Jonathan Tan>           pack: move for_each_packed_object()
| * | f9a8672a8                (4 weeks ago)  <Jonathan Tan>           pack: move has_pack_index()
...
...
...
| * | | | | | | | fdbdb64f4    (5 weeks ago)  <Jeff King>              interpret-trailers: add an option to show only existing trailers
| * | | | | | | | 56c493ed1    (5 weeks ago)  <Jeff King>              interpret-trailers: add an option to show only the trailers
| * | | | | | | | 8abc89800    (5 weeks ago)  <Jeff King>              trailer: put process_trailers() options into a struct
* | | | | | | | |   bfd91b413  (3 weeks ago)  <Junio C Hamano>         Merge branch 'pb/trailers-from-command-line'
|\ \ \ \ \ \ \ \ \
| * | | | | | | | | c88bf5436  (7 weeks ago)  <Paolo Bonzini>          interpret-trailers: fix documentation typo
| * | | | | | | | | 0ea5292e6  (7 weeks ago)  <Paolo Bonzini>          interpret-trailers: add options for actions
Run Code Online (Sandbox Code Playgroud)

前 100 次提交完全一致。

用颜色...

颜色

在将 git 日志输出通过管道输送到列之前,您需要对 git 日志输出进行额外的预处理。
请参阅“漂亮打印列中的颜色转义代码”。