如何让git log剪掉长评论?

Mar*_*erg 31 git

我有一个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)

  • 对我来说,这不仅将长主题截断为 50 个,还填充了短主题以使其达到 50 个 (3认同)
  • 谢谢!“trunc”部分就是我正在寻找的部分。 (2认同)
  • 不垫就好了。我不知道该怎么做 (2认同)

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)


And*_*cer 5

仅截断和填充提交消息

根据其他答案,格式占位符%<(50,trunc)%s将打印截断为 50 个字符的提交消息。但这也会将较短的值填充到相同的值,并且无法告诉它不要。

如果这适合您,那么您就完成了。如果没有,则需要另一种方法。

以终端宽度截断整条线

同样根据其他答案,您可以配置less -Score.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)