如何修复git log --graph中的对齐问题

问题描述 投票:2回答:2

如果没有可用的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

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

Git treex result. (点击放大)

如何通过图形本身修复损坏的对齐原因?

git pretty-print text-alignment
2个回答
2
投票

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

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

该格式在documentation of git log格式下的<()中描述,它存在于文档页面的所有版本中(不幸的是以2.3.8开头)。如果您使用的是较旧的Git版本,则可能无法使用该格式。在这种情况下,最好的建议是将您的Git更新为更新版本。


2
投票

Shifting the %h placeholder for alignment

正如axiac之前提到的那样,你可以约束第一个字段的宽度。例如,如果将%>|(16)添加到格式化定义的开头,则可以将缩写的提交哈希(%h)移至至少在第16列完成。如果你减去%h的7位数字和一个额外的空格字符,你将给图表一个8位数的范围。

您原来的git日志历史记录格式:Unaligned git log history

通过为%>|(16)添加%h更加一致的版本:Aligned git log history

Adding a length argument

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

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

Set a default value for the length argument

现在,您可能无意在每次调用别名时传递列数。这个30解释了如何设置默认参数。这样,您的别名引用了一个没有参数的默认值。一旦我们在它,我们可以直接在别名内纠正8位数的偏差。因此,传递的参数直接对应于实际移位的列。

Final alias

你的最终Git别名接受一个参数,用Qazxswpoi列移动Git日志条目,默认移位为8位:

Aligned git log history with argument
© www.soinside.com 2019 - 2024. All rights reserved.