格式字符串,用于`git log--Beauty`输出的条目之间的一致分隔 [英] Format string for consistent separation between entries output by `git log --pretty`

查看:17
本文介绍了格式字符串,用于`git log--Beauty`输出的条目之间的一致分隔的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试开发要传递给git log --pretty的格式字符串,以便每个日志条目都以完整的提交消息结束,但每个日志条目都由正好一个空行分隔。问题是一些完全提交消息以换行符结尾,而另一些则不是。

例如,假设我有两个提交,abc1234def5678,但只有abc1234在完整提交消息的末尾包含换行符。在命令行上输出原始提交内容如下所示:

[prompt]$ git cat-file commit abc1234
(...)

Title FOO

Full commit message FOO
[prompt]$ git cat-file commit def5678
(...)

Title BAR

Full commit message BAR[prompt]$

请注意,新的外壳提示如何出现在输出的最后一行的末尾,这表明提交def5678在完整提交消息的末尾包含换行符。

假设def5678abc1234的父项,我想输出一个简单的日志,其中每个条目只包含简短的提交散列、标题行和完整的提交消息。我可能会尝试这样做:

[prompt]$ git log --graph --pretty='commit %h%n%B' abc1234
* commit abc1234
| Title FOO
| 
| Full commit message FOO
|
* commit def5678
| Title BAR
|
| Full commit message BAR
* commit <parent of def5678>
(...)
请注意日志条目之间的空格。abc1234def5678的条目由空行分隔(图形字符除外),但def5678及其父项的条目不是空行。

如何构造格式字符串以使间隔一致,即使完全提交消息的终止不一致?mediumfullfulleremail的内置格式已经做到了这一点,但我希望能够构造任意格式的字符串来做同样的事情。

我尝试过%+B%-B% B序列(以及它们的%b%n等效项),但似乎无法获得一致的间距。

我正在使用Git 2.17.0,如果这有什么不同的话。

推荐答案

正如@jthill在评论中所暗示的,表示为git-log(1)

如果在占位符的%后添加-(减号),则所有 紧接在展开之前的连续换行符被删除 当且仅当占位符扩展为空字符串时。

因此,如果我们可以找到一个格式序列,%<token>将始终扩展到空字符串,我们可以使用%-<token>%n将零个或多个连续的换行符替换为一个换行符。结果是,这样的格式序列:%C(),空的颜色选择器。(通常,圆括号包含一个非空字符串,用于指定要在日志输出中使用的颜色。有关详细信息,请参阅git-log(1)git-config(1)。)

%C()计算结果为空字符串而不是导致错误这一事实看起来像是一个愉快的意外,而不是值得炫耀的事情,但至少对于Git 2.17来说,它做到了。此时,我有足够的信息来回答我自己的问题。

要在git log --pretty=<tformat>输出的日志条目之间保持一致的分隔,其中<tformat>可能计算为或不计算为以换行符结尾的字符串,请将%-C()%n追加到<tformat>例如:

[prompt]$ git log --graph --pretty='commit %h%n%B%-C()%n' abc1234
* commit abc1234
| Title FOO
| 
| Full commit message FOO
|
* commit def5678
| Title BAR
|
| Full commit message BAR
|
* commit <parent of def5678>
(...)

这篇关于格式字符串,用于`git log--Beauty`输出的条目之间的一致分隔的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆