如何让git log剪掉长评论?

时间:2014-02-17 13:49:01

标签: 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.

7 个答案:

答案 0 :(得分:51)

在文档中并不清楚需要哪些字符,但以下示例将主题行剪切为50个字符:

git log --oneline --format="%h %<(50,trunc)%s"

格式规范是%<,其参数必须在括号中。在这种情况下,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

答案 1 :(得分:10)

晚会,但这些选项也会这样做:

$ git config --global core.pager 'less -S'

或(例如)

$ echo $LESS
-R
$ export LESS=-RS

答案 2 :(得分:1)

git log --oneline

将显示剥离的提交头(有代码)

git log --pretty=oneline

将显示完整的提交头(有代码)

答案 3 :(得分:1)

(我似乎完全无法对评论进行适当的格式化,因此将此作为答案发布,但实际上是对@ patthoyts的回复的评论。)

关于trunc的可爱之处在于它可以填充,所以你可以这样使用它:
git log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse
产生一个更容易(至少对我来说)的概述。

$ git log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse
2015-06-15 initial commit 5099ede 2015-06-16 Layout - Responsive grid added. 6534242 2015-06-17 HTML - H1 / Title updated <title>Testpage</title.. 88ea464 2015-06-18 Updating the Hotfix changes a8fbc47

提示 - 添加一个alias,例如,截断,以方便自己 git config --global alias.trunc 'log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse'

答案 4 :(得分:1)

仅截断并填充提交消息

根据其他答案,格式占位符%<(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`

两者结合

您还可以将其与格式化占位符结合使用。这是一个使用--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"

答案 5 :(得分:0)

试试这个:

git log --pretty=oneline

希望它有所帮助。

答案 6 :(得分:0)

我将其放入~/bin/git-mylog

#!/bin/bash
COLS=$(tput cols)
git log --format="tformat:%>|(15)%C(auto)%h %Cgreen %<(20,trunc)%cn %C(auto) %<(15,trunc)%ar %<($((COLS-55)),trunc)%s" --graph

这里有一些事情要做,但其要点是使用tput cols来获取终端宽度,然后执行一些算法以将注释宽度截断为实际可用空间而不是固定宽度。 / p>