【问题标题】:How to fix alignment problem in git log --graph如何修复 git log --graph 中的对齐问题
【发布时间】:2018-09-01 14:11:01
【问题描述】:

如果没有可用的 GUI,我将使用以下别名在控制台上呈现我的 git 提交历史记录:

$ git config alias.treex
log --color --graph --pretty=format:'%C(cyan)%h%Creset - %C(cyan)%ad%Creset %<(80,trunc)%s   %C(cyan)%>(20,trunc)%an - %Cgreen%>(12)%cr%Creset' --date=format:'%d.%m.%Y %H:%M' --abbrev-commit --all

虽然格式字符串使用对齐和固定大小的字符串格式,如%&lt;(80,trunc)%s,但git log --graph 呈现的图形会破坏对齐:


(点击放大)

如何解决由于图形本身导致的对齐问题?

【问题讨论】:

  • 您不能在 git log 内部执行此操作。您需要编写自己的程序。最好的办法是使用git loggit rev-list 提取您想要显示的数据,按照您想要的方式对其进行格式化,然后进行显示。这就是gitk 所做的,例如,尽管它是通过使用 Tcl/TK 的 GUI 来做的;同样的方法也适用于文本。

标签: git pretty-print text-alignment


【解决方案1】:

而不是 %&lt;(80,trunc)%s 告诉 git log 在 80 个字符上呈现主题,您可以使用 %&lt;|(110,trunc)%s 告诉它呈现主题直到它到达 110th 列输出。这样,主题后的下一个字段从111st 列开始,并恢复顺序。
110 大约是您想要的主题的原始 80 字符 + 之前列的大小(%h = 7 字符,%ad = 16 字符)以及您在它们之间放置的分隔符。)

当然,您可以使用不同的值。您还可以尝试限制第一个字段 (%h) 的宽度以使所有其他字段对齐,但它不会在包含大量分支的历史记录部分正确对齐; %s 字段很大,使用的列足以容纳两打并发分支。

该格式在&lt;() 格式下方的documentation of git log 中进行了描述,并且它出现在文档页面的所有版本中(不幸的是以2.3.8 开头)。如果您使用的是较旧的 Git 版本,则该格式可能对您不可用。在这种情况下,最好的建议是将您的 Git 更新到较新的版本。

【讨论】:

    【解决方案2】:

    移动 %h 占位符以进行对齐

    正如前面提到的axiac,您可以限制第一个字段的宽度。例如,如果您将%&gt;|(16) 添加到格式定义的开头,您可以将缩写的提交哈希 (%h) 移动到至少在第 16 列完成。如果您减去 %h 的 7 位数字和一个额外的空白字符,您将给图形一个 8 位数字的范围。

    你原来的 git log 历史格式:

    通过为%h 添加%&gt;|(16) 得到更一致的版本:

    添加长度参数

    正如axiac 也提到的,这个解决方案会面临一个问题。一旦您的图表超过 8 个字符的长度,由于项目包含许多并行分支,您的日志条目将移动得更多。您必须根据当前 Git 项目情况调整别名。幸运的是有一个trick for powerful Git aliases。通过这个技巧,您可以将一个参数传递给您的别名,以设置移位列的数量。

    使用参数30 调用您的别名,然后将您的 Git 日志历史记录条目移动 22 列:

    为长度参数设置默认值

    现在,您可能不打算在每次调用别名时传递列数。这个link 解释了如何设置默认参数。这样,您的别名指的是在没有参数的情况下调用一次的默认值。一旦我们做到了,我们可以直接在别名内部纠正 8 位的偏差。因此,传递的参数直接对应于实际移动的列。

    最终别名

    您的最终 Git 别名接受参数以将 Git 日志条目移动 x 列,默认移动为 8 位:

    $ git config --global alias.treex
    !f() { x=${1-16}; length=`expr $x + 8`; git log --color --graph --pretty=format:"%>|($length)%C(cyan)%h%Creset - %C(cyan)%ad%Creset %<(80,trunc)%s   %C(cyan)%>(20,trunc)%an - %Cgreen%>(12)%cr%Creset" --date=format:%d.%m.%Y; }; f
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-19
      • 2015-12-18
      • 2011-06-11
      • 2019-03-21
      • 2011-10-22
      • 2020-05-26
      • 1970-01-01
      • 2017-09-19
      相关资源
      最近更新 更多