我有一个git日志别名,将每个提交打印为一行.由于有些人在提交日志中编写了太长的单行,因此许多提交都会换行到新行.如何格式化git log输出以在50个字符后剪切注释?
我在git-log手册页中找到了这个,但它只会填充简短的注释,而不会删除很长的注释.
%<(<N>[,trunc|ltrunc|mtrunc]): make the next placeholder take at least N columns,
padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc),
the middle (mtrunc) or the end (trunc) if the output is longer than N columns. Note that
truncating only works correctly with N >= 2.
Run Code Online (Sandbox Code Playgroud)
pat*_*yts 61
在文档中并不清楚需要哪些字符,但以下示例将主题行剪切为50个字符:
git log --oneline --format="%h %<(50,trunc)%s"
Run Code Online (Sandbox Code Playgroud)
格式规范是,%<
并且它的参数需要在括号中.在这种情况下,50个字符并截断多余的字符.
例如,在msysGit存储库上执行此操作会产生:
C:\src\msysgit>git log -n 5 --format="%h [%<(12,trunc)%aN] [%<(12,trunc)%cN] %<(50,trunc)%s"
218ed04 [Sebastian ..] [Sebastian ..] Merge pull request #154 from csware/tortoisegitp..
8a920b9 [Sven Stric..] [Sven Stric..] Installer: Detect TortoiseGitPlink from Tortoise..
448e125 [dscho ] [dscho ] Merge pull request #152 from csware/syscommand
db8d1bf [Sven Stric..] [Sven Stric..] Perl readline creates empty sys$command files if..
753d3d6 [Johannes S..] [Johannes S..] Git for Windows 1.8.5.2-preview20131230
Run Code Online (Sandbox Code Playgroud)
Edw*_*alk 11
晚会,但这些选项也会这样做:
$ git config --global core.pager 'less -S'
Run Code Online (Sandbox Code Playgroud)
或(例如)
$ echo $LESS
-R
$ export LESS=-RS
Run Code Online (Sandbox Code Playgroud)
根据其他答案,格式占位符%<(50,trunc)%s
将打印截断为 50 个字符的提交消息。但这也会将较短的值填充到相同的值,并且无法告诉它不要。
如果这适合您,那么您就完成了。如果没有,则需要另一种方法。
同样根据其他答案,您可以配置less -S
为core.pager
全局或每个存储库的选项。这将在终端宽度处修剪整个日志字符串,避免折行。
但它会对所有 Git 命令执行此操作!(至少所有产生分页输出的)。
您可以使用该-c
选项执行此操作,例如git -c core.pager='less -S' log --graph --oneline
更好的是,将其设置为别名,这样您就不必每次都输入它:
git config --global alias.graph "-c core.pager='less -S' \
log --graph --oneline`
Run Code Online (Sandbox Code Playgroud)
您还可以将其与格式化占位符结合使用。这是一个使用--graph
标志的示例,其中提交消息也被填充/截断为 50 个字符,但由于该--graph
选项创建了提交图的可变宽度绘图,您需要结合这两种方法。而且你不想每次都输入这个:
git config --global alias.graph "-c core.pager='less -S' \
log --pretty='tformat:%C(bold cyan)%h %C(blue)%<(10,trunc)%aN \
%<(50,trunc)%C(white)%s %C(auto)%d %C(dim green)%ar' --graph"
Run Code Online (Sandbox Code Playgroud)