我想使用“引用”格式[1],但只带有截断的摘要。问题在于
$<()
和其他修饰符是用于“填充”,而我只想要截断。
请注意,我只想截断摘要,而不是整个输出行[2]。
我没有找到使用git(1)格式化实现这一点的方法,所以不得不使用通常的丑陋管道。
git log --date=short --pretty='format:%C(auto)%h (%<(50,trunc)%s, %ad)' $@ \
| tr --squeeze-repeats ' ' | sed -e 's/ ,/,/g' | less --quit-if-one-screen
- 将宽度截断为50个ASCII字符
tr --squeeze-repeats ' '
用于去除连续的空白字符,即填充
- 摘要行也可能包含连续的空白字符,但这种情况非常不常见,我不关心
sed -e 's/ ,/,/g'
用于去除剩余的单个空格,即分隔摘要和日期的逗号前的空格
less --quit-if-one-screen
旨在模拟默认的git(1)对输出的处理方式
作为Git别名(使用通常的位置参数的shell函数模式):
logrefshort = "!f() { git log --date=short --pretty='format:%C(auto)%h (%<(50,trunc)%s, %ad)' $@ | tr --squeeze-repeats ' ' | sed -e 's/ ,/,/g' | less --quit-if-one-screen; }; f"
例子
$ git logrefshort --no-merges -20 origin/master
d4a83d07b8c (The tenth batch, 2023-09-18)
bda494f4043 (The ninth batch, 2023-09-14)
d6c51973e4a (The eighth batch, 2023-09-13)
9f892830d69 (completion(switch/checkout): treat --track and -.., 2023-09-08)
94e83dcf5b5 (The seventh batch, 2023-09-07)
aae8558b103 (grep: reject --no-or, 2023-09-07)
203573b0246 (rebase -i: fix adding failed command to the todo.., 2023-09-06)
405509cbd66 (rebase --continue: refuse to commit after failed.., 2023-09-06)
e032abd5a0b (rebase: fix rewritten list for failed pick, 2023-09-06)
f2b5f41eda5 (sequencer: factor out part of pick_commits(), 2023-09-06)
9f67899b41e (sequencer: use rebase_path_message(), 2023-09-06)
206a78d7108 (rebase -i: remove patch file after conflict reso.., 2023-09-06)
36ac861a305 (rebase -i: move unlink() calls, 2023-09-06)
11422f23e3e (doc/diff-options: fix link to generating patch s.., 2023-09-06)
256a94ef6c8 (var: avoid a segmentation fault when `HOME` is u.., 2023-09-04)
82af2c639c4 (sequencer: fix error message on failure to copy .., 2023-09-03)
2a63c79dae7 (grep: use OPT_INTEGER_F for --max-depth, 2023-09-02)
078c42531e8 (name-rev: use OPT_HIDDEN_BOOL for --peel-tag, 2023-09-02)
6d79cd8474b (ref-filter: sort numerically when ":size" is used, 2023-09-02)
0058b3d5eed (parse-options: mark unused parameters in noop ca.., 2023-08-31)
注意事项
git log --format=reference
。例如:aae8558b103 (grep: reject --no-or,
2023-09-07)
- 但与其余的格式相比,它并不是非常动态(不像摘要)。唯一可能变化的事项(在公元10000年之前)是缩写哈希值,因为其长度取决于数据库/仓库中的对象数量。