如果没有可用的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
呈现的图形破坏了对齐方式:
如何通过图形本身解决对齐错误的问题?
答案 0 :(得分:2)
您可以使用%<(80,trunc)%s
告诉主题渲染主题直到到达git log
为止,而不是%<|(110,trunc)%s
告诉主题110
使用80个字符进行渲染。输出的> th 列。这样,主题之后的下一个字段从111
st 列开始,并且顺序被恢复。
({110
大约是您想要主题的原始80
字符加上其前面各列的大小(%h
= 7
字符,{{1} } = %ad
个字符)以及您在它们之间放置的定界符。)
您当然可以使用其他值。您也可以尝试限制第一个字段(16
)的宽度,以使所有其他字段对齐,但是在包含很多分支的历史记录部分上,该字段无法正确对齐; %h
字段很大,并使用足够的列来容纳两个并发分支。
该格式在%s
格式下的documentation of git log
中进行了描述,并且它存在于文档页面的所有版本中(不幸的是,它们以<()
开头)。如果您使用的是较旧的Git版本,则该格式可能对您不可用。在这种情况下,最好的建议是将您的Git更新到最新版本。
答案 1 :(得分:2)
%h
占位符以进行对齐正如axiac前面提到的,您可以限制第一个字段的宽度。例如,如果在格式定义的开头添加%>|(16)
,则可以移动缩写的提交哈希(%h
)至少在第16列结束。如果您将%h
的7位数字和一个额外的空格字符相减,则图形的范围将为8位数字。
正如axiac也提到的那样,该解决方案将面临问题。一旦图形超过8个字符的长度,由于一个项目包含许多并行分支,则日志条目的偏移量将更大。您将不得不根据当前Git项目的情况来调整别名。幸运的是有一个trick for powerful Git aliases。使用此技巧,您可以将一个参数传递给您的别名,该参数设置移位列的数量。
使用参数30
调用别名,然后将Git日志历史记录条目移动22列:
现在,您并不是每次都打算通过别名来传递列数。 link解释了如何设置默认参数。这样,您的别名将引用一次不带参数的默认值。一旦完成操作,我们就可以直接在别名内部更正8位数字的偏差。因此,传递的参数直接对应于实际移位的列。
您的最终Git别名接受一个参数,以将x
列的Git日志条目移位,默认移位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