我有一个简单的别名,显示最后几个提交:Git的日志表格格式
log --pretty=format:'%h %an %s' -10
我怎样才能让显示在列的结果,像这样:
898e8789 Author1 Commit message here
803e8759 Other Author name Commit message here
我有一个简单的别名,显示最后几个提交:Git的日志表格格式
log --pretty=format:'%h %an %s' -10
我怎样才能让显示在列的结果,像这样:
898e8789 Author1 Commit message here
803e8759 Other Author name Commit message here
在Git中1.8 0.3和以后,有在pretty format此本机支持,使用%<(N)
语法来格式化下一个占位符作为ñ列宽:
$ git log --pretty=format:'%h %<(20)%an %s' -10
对于1.8.3之前的版本,此答案的以前版本保留在下面,应该可以工作。
这是Bash中的一个解决方案,使用read
来分析日志行,printf
将它们打印出来,对于作者名称使用固定宽度的字段,以便列保持排队。它假设|
永远不会出现在作者的名字中;如果你认为这可能是一个问题,你可以选择另一个分隔符。每当面临
[alias]
mylog = "!git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message; do printf '%s %-20s %s\n' \"$hash\" \"$author\" \"$message\"; done"
我相信你能做到这一点,使用awk
更少的字符,但作为the saying推移,
:
git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message do printf '%s %-20s %s\n' "$hash" "$author" "$message" done
您可以使用此创建作为别名一个问题,有人说“让我们使用AWK”。现在,他们有两个问题。
当然,话说回来,我必须弄清楚如何做到这一点的awk
这是一个有点短:
git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }'
虽然这个工作原理 - 使用@Jesse建议的原生git-log方法是非常简洁的 – 2015-02-05 14:55:19
@SeanBurlington当我在2010年编写这个答案时,它不存在;对于间距占位符的支持增加了[在2013年的1.8.3中](https://github.com/git/git/commit/a57523428b4c08795e793356e12afc3de812f84a)(尽管由于某些原因,它似乎是[从发行说明中缺失的] (https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.3.txt))。既然您已经指出有更好的解决方案可用,我已将其纳入我的答案。 – 2015-02-05 17:03:34
我希望'%<(N)'语法可以在使用'--format'的Git的其他区域中工作,但现在似乎仅限于'--pretty'。在2013年,有一些关于使用'for-each'语法的[一些讨论](http://lists-archives.com/git/797299-for-each-ref-support-aligned-for-left-alignment.html) -ref --format'和一些'%(...:aligned)'的实验,但那个讨论似乎已经死亡。 – Dennis 2015-02-23 13:56:37
以下命令将打印在日志中以表格形式
git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|'
column命令“列”输出,使用“|”作为字段分隔符,它会在给定输入的情况下找出最佳的列宽度,所以即使您有更多的字段,它也可以很好地工作。
在Linux上,只要你不使用颜色,Linux的实现不能很好地处理ANSI escape codes。
但在Mac OS X中,它将处理颜色,并且可以使用任何Unicode字符作为字段分隔符。我使用Σ,因为我很确定它不会偶然出现在提交文本中。 |
是一个糟糕的选择,因为它可能会出现在提交说明书以及如果使用--graph --decorate --all
它会显示为用来绘制图形符号的一部分
第一个答案我看到了这个工作:'git log --pretty = format:'%cr |%s'-10 |列-t -s'''' – lightningleaf 2018-03-06 14:38:57
为了获得真正的表格格式,您还需要截断比例如长度更长的用户名。 20个字符:
git log --pretty=format:'%h %<(20,trunc)%an %s' -10
此外,如果你正在输出到终端,则可能希望防止线溢出了由任一截断提交消息字段:
git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10
或包裹线和缩进任何溢出线来对齐:
git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10
@TamaMcGlinn希望这应该有所帮助 – insysion 2016-08-31 12:18:39
如果有一个能够执行此操作的Unix工具,我很想知道它!我能想到的最好的事情是Perl格式化输出,这是一个痛苦。 – zwol 2010-09-02 20:55:54
@Zack:男人专栏是你的朋友。 – toong 2011-08-23 09:27:09
不幸的是,这似乎是一个BSDism。 – zwol 2011-08-23 15:03:05