如何让git log剪切长评论?

332nm8kg  于 2023-02-02  发布在  Git
关注(0)|答案(7)|浏览(151)

我有一个git日志别名,它把每一个提交都打印成一行。因为有些人在提交日志中写了太长的一行代码,所以很多提交都换了一行。我该如何格式化git日志输出,以便在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.
xn1cxnb4

xn1cxnb41#

文档中并不清楚需要哪些字符,但以下示例将主题行剪切为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
kgqe7b3p

kgqe7b3p2#

迟到了,但这些选项也会做到这一点:

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

或(例如)

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

zbdgwd5y3#

仅截断并填充提交消息

根据其他答案,格式占位符%<(50,trunc)%s将打印提交消息,但这也会将较短的值填充为相同的值,而且没有办法告诉它不要这样做。
如果这适合你,那么你就完成了。如果不适合,就需要另一种方法。

在终端宽度处截断整行

另外,根据其他答案,您可以将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"
qacovj5a

qacovj5a4#

我把这个放入~/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来获得终端宽度,然后执行一些运算,将注解宽度截断为实际可用的空间,而不是固定的宽度。

omtl5h9j

omtl5h9j5#

(我似乎完全无法适当地格式化评论,所以把它作为一个答案贴出来,但实际上是对@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,比如trunc,让自己轻松一些。
git config --global alias.trunc 'log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse'

jhdbpxl9

jhdbpxl96#

git log --oneline

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

git log --pretty=oneline

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

tvz2xvvm

tvz2xvvm7#

省略号的使用在Git 2.40(Q1 2023)中得到了澄清:
参见commit 540e7bccommit b5cd634commit 63792c5commit 8bcb8f8commit d664a7a(2023年1月19日)和Philip Oakley ( PhilipOakley )
(由Junio C Hamano -- gitster --合并至commit 4ac326f,2023年1月30日)

docpretty-format描述了在截断中使用省略号

签署人:菲利普·奥克利
提交a7f01c6pretty:支持%>中的截断,2013年4月19日,Git v1.8.3-rc0--merge)(pretty:支持在%>%<%><中截断,2013 - 04 - 19)在截断占位符值时添加了省略号的使用。
显示我们的"两点"省略号,以及左、中、右截断的示例,以避免对字符串的哪一端进行调整产生任何混淆。
(cf对齐和子串)。
pretty-formats现在在其手册页中包括:
如果输出长于N列,则在左侧(ltrunc)..ft、中间(mtrunc)mi..le或末尾(trunc)rig..处截断(使用省略号"..")。
这就是%C(blue)%<(10,trunc)%aN %<(50,trunc)%C(white)%s的功能。

相关问题