如何解决git日志--图形中的对齐问题

如何解决git日志--图形中的对齐问题,git,pretty-print,text-alignment,Git,Pretty Print,Text Alignment,如果没有可用的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' --ab

如果没有可用的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
$git config alias.treex
log--color--graph--pretty=格式:'%C(青色)%h%Creset-%C(青色)%ad%Creset%(20,trunc)%an-%Cgreen%>(12)%cr%Creset'--date=格式:'%d.%m.%Y%h:%m'--abbrev commit--all
而格式字符串使用对齐和固定大小的字符串格式,如
%,而不是
%移动
%h
占位符进行对齐 如前所述,可以约束第一个字段的宽度。例如,如果将
%>|(16)
添加到格式定义的开头,则可以将缩写提交哈希(
%h
)移动到至少第16列。如果减去
%h
的7位数字和一个额外的空白字符,则图形的范围为8位

原始git日志历史记录格式:

通过为
%h
添加
%>|(16)
,使版本更加一致:

添加长度参数 如前所述,该解决方案将面临一个问题。一旦图形长度超过8个字符,由于项目包含许多并行分支,您的日志条目将进一步移位。您必须根据当前的Git项目情况调整别名。幸运的是,有一个。使用此技巧,可以将参数传递给别名,以设置移位列的数量

使用paramater
30
调用别名,然后将Git日志历史记录项移动22列:

设置长度参数的默认值 现在,您可能不打算每次调用别名时都传递列数。这说明了如何设置默认参数。这样,您的别名引用了在没有参数的情况下调用的默认值。一旦我们做到了这一点,我们就可以直接在别名内纠正8位数字的偏差。因此,传递的参数直接对应于实际移位的列

最终别名 您的最终Git别名接受一个参数,将Git日志项按默认移位8位的
x
列移位:

$ 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
$git config--global alias.treex
!f(){x=${1-16};长度=`expr$x+8`;git log--color--graph--pretty=format:“%>|($length)%C(青色)%h%Creset-%C(青色)%ad%Creset%(20,trunc)%an-%Cgreen%>(12)%cr%Creset”--日期=格式:%d.%m.%Y;F

您不能在git日志本身中执行此操作。您需要编写自己的程序。您最好使用
git log
git rev list
提取您想要显示的数据,按您想要的方式格式化,然后显示。例如,
gitk
就是这样做的,尽管它是通过使用Tcl/TK的GUI实现的;同样的方法也适用于文本。