tak*_*hin 40 git bash scripting
我有一个简单的别名来显示最后的提交:
log --pretty=format:'%h %an %s' -10
Run Code Online (Sandbox Code Playgroud)
如何使结果显示在列中,如下所示:
898e8789 Author1 Commit message here
803e8759 Other Author name Commit message here
Run Code Online (Sandbox Code Playgroud)
Bri*_*ell 56
在Git 1.8.3及更高版本中,以漂亮的格式对此进行本机支持,使用语法将下一个占位符格式化为N列宽:%<(N)
$ git log --pretty=format:'%h %<(20)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
对于1.8.3之前的版本,下面保留的此答案的先前版本应该可以使用.
这是Bash中的解决方案,read
用于将日志行分开并printf
打印出来,并为作者姓名提供固定宽度字段,以便列保持排列.它假定|
永远不会出现在作者的名字中; 如果您认为可能存在问题,可以选择其他分隔符.
git log --pretty=format:'%h|%an|%s' -10 |
while IFS='|' read hash author message
do
printf '%s %-20s %s\n' "$hash" "$author" "$message"
done
Run Code Online (Sandbox Code Playgroud)
您可以使用以下命令将其创建为别名:
[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"
Run Code Online (Sandbox Code Playgroud)
我相信你能做到这一点,使用更少的字符,awk
但俗话说得好,
每当遇到问题时,有人会说"让我们使用AWK."现在,他们有两个问题.
当然,话虽如此,我不得不弄清楚如何做到这awk
一点有点短:
git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }'
Run Code Online (Sandbox Code Playgroud)
Jes*_*sse 35
你也可以这样做:
git log --pretty=format:'%h %<(20)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
无需外壳魔法或后处理用awk
,column
等等.
ece*_*ulm 16
以下命令将以表格形式打印日志
git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|'
Run Code Online (Sandbox Code Playgroud)
的列命令"columnates"的输出,采用了"|" 作为字段分隔符,它将在给定输入的情况下找出最佳列宽,因此即使您有更多字段也能正常工作.
在Linux上它只要你不使用颜色就可以正常工作,Linux实现不能很好地处理ANSI转义码.
但在Mac OS X中,它将处理颜色,您可以使用任何unicode字符作为字段分隔符.我使用Σ,因为我很确定它不会偶然发生在提交文本上.|
是一个糟糕的选择,因为它可能出现在提交描述中,如果你使用--graph --decorate --all
它将显示为用于绘制图形的符号的一部分
ins*_*ion 10
为了获得真正的表格格式,您还需要截断超过例如20个字符的用户名:
git log --pretty=format:'%h %<(20,trunc)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
此外,如果您要输出到终端,您可能希望通过截断提交消息字段来防止线路溢出:
git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10
Run Code Online (Sandbox Code Playgroud)
或包裹线条并缩进任何溢出的线条以对齐:
git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
编辑:上面的例子硬编码终端宽度为79个字符.在POSIX系统上,您可以使用tput cols
返回宽度:
git log --pretty=format:'%w(`tput cols`, 0, 29)%h %<(20,trunc)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
要么
git log --pretty=format:'%w($((`tput cols`-1)), 0, 29)%h %<(20,trunc)%an %s' -10
Run Code Online (Sandbox Code Playgroud)
不幸的是,这最后两个中断git alias
所以它需要一个终端别名(除非你真的喜欢打字).
jas*_*ard 10
您正在寻找的是:
%x09
git log --pretty=format:"%C(magenta)%h %C(cyan)%C(bold)%ad%Creset %C(cyan)%cr%Creset%x09 | %s %C(green)%Creset" --date=short
Run Code Online (Sandbox Code Playgroud)
我希望将相对日期标记为选项卡,因为它不是固定长度,这样所有列都排列起来(对于小于一年前的任何内容)。想让它一直排队,但这是我在时间耗尽之前所能做到的(讽刺的是)。
希望这可以帮助!
如果您有关于改进相对年份案例的答案的建议(而不仅仅是找出年份),也很高兴听到它们,如果您知道如何做,请随时编辑此答案以添加它们。
我决定也尝试一下%<(n)
另一个人建议的语法,我发现如果你有超过 9 年的东西,那么它就太短了,10 年是使用%<(20)
建议的多一个数字。相反,我建议%<(23)
git log --pretty=format:"%C(magenta) %h %C(cyan)%C(bold)%ad%Creset %<(23) %C(cyan)%cr%Creset %s%C(green)%Creset" --date=short`
Run Code Online (Sandbox Code Playgroud)
除非这个项目已有 100 多年的历史,否则它会很好地排列起来。但如果你想让它起作用,你只需添加 1 即可%<(24)
归档时间: |
|
查看次数: |
14467 次 |
最近记录: |