我正在尝试使用文件状态信息获取自定义格式的git日志。但是,我遇到了一个奇怪的新问题。
显然,每当使用--format
或--pretty
参数时,通常在省略文件状态信息后插入换行符。这导致了一些难以阅读的输出,如
>> git log -3 --graph --name-status --format=%h:%s
* eee8e08:Second commit With more details in the body.
|
| M hello.txt
* b6146f7:First commit.
|
| A hello.txt
| A world.txt
* 30cb21f:We start from here. Bla bla bla.
在视觉上文件状态看起来与错误的提交组合在一起。
如果没有--graph
选项的要求,可以通过在格式的开头添加换行符(%n
)来轻松修复,但是 - 这只会导致更加奇怪看,将提交消息从表示图中注释的*
移开。
>> git log -3 --graph --name-status --format=%n%h:%s
*
| 1868195:Second commit With more details in the body.
|
| M hello.txt
*
| 0f03672:First commit.
|
| A hello.txt
| A world.txt
*
| 033f27f:We start from here. Bla bla bla.
缺少的换行会影响所有文件状态切换(例如--name-status
,--stat
,--numstat
)。
作为参考,没有格式化命令,详细消息有更好的换行定位,
>> git log -3 --graph --name-status
* commit eee8e08d3c892e96228844bcdc6324dc895041af
| Author: me <me@me.org>
| Date: Wed Nov 22 16:26:58 2017 +0100
|
| Second commit
| With more details in the body.
|
| M hello.txt
|
* commit b6146f70b3406508f5b1300c8cda6fd954d3eadd
| Author: me <me@me.org>
| Date: Wed Nov 22 16:26:58 2017 +0100
|
| First commit.
|
| A hello.txt
| A world.txt
|
* commit 30cb21f8aba82b30a2f780165533b477cb4555f9
| Author: me <me@me.org>
| Date: Wed Nov 22 16:26:58 2017 +0100
|
| We start from here.
| Bla bla bla.
使消息,标题和文件状态的分组更加清晰。
是否有一些方法可以将文件状态信息转换为自定义日志格式,而不会错过将其与上一次提交分开的新行?
作为参考,输出是在带有脚本https://pastebin.com/exLswmeR
的测试存储库中创建的答案 0 :(得分:2)
这应该可以胜任:git log -3 --graph --name-status --pretty='format:%h:%s%n'
默认情况下,格式化git使用tformat
我猜。见https://git-scm.com/docs/git-log。通过将其设置为format
,新行将正常添加。
我认为它因为这个而改变了格式(来自git doc):
In addition, any unrecognized string that has a % in it is interpreted
as if it has tformat: in front of it. For example, these two are
equivalent:
$ git log -2 --pretty=tformat:%h 4da45bef
$ git log -2 --pretty=%h 4da45bef