解码git log complex pretty 格式
Decoding git log complex pretty format
我正在尝试为我的开源项目移植一些 git
依赖的东西到 libgit2
。
其中一个 git
调用非常奇怪:
git log --topo-order --no-color --parents --boundary -z --pretty=format:%m%HX%PX%n%cn<%ce>%n%an<%ae>%n%at%n%s%n%b HEAD --all
首先,我对格式字符串很感兴趣。
H
之后的 X
是什么意思?我无法在官方 git 网站上找到 X
说明符:/
第二个问题 - libgit2
可以进行这种复杂的格式化,还是我应该自己处理?
P.S。但是,我很确定它不能:)
X
不是格式说明符。
--pretty=format:
或 --pretty=tformat:
的参数(大多数用户需要 tformat
,但此代码使用 -z
,它在每次提交后添加一个 NUL 字符)包含指令,如%m
和%H
,以及简单转录的文字:
$ git log -n 3 --pretty=tformat:hello%x25world
hello%world
hello%world
hello%world
在这里,hello
和 world
字符串被简单地复制,而 %x25
被解释。因为它表示 "print character with hex code 25" 是百分号 %
,并且 -n 3
告诉 git log
在记录三个提交后停止,所以我们得到了 hello%world
的三个副本。
字面值 X
有效是因为 %m
打印了一个不是 X
的字符,%H
和 %P
打印了不包含 X
,并且 %n
打印一个换行符——因此无论读取此输出的是什么,都可以确保每个提交都以标记字符、一个 X
、提交哈希、另一个 X
、和每个父散列之间有一个 space,然后是一个换行符。
%s%n%b
序列不是完全必要的(可以简单地使用 %B
代替)。不过,我不确定这是否会调整 "unusually formatted" 提交的方式——不是单个主题行,后跟一个换行符,然后是一个提交主体——出来。应该是吧。
(我对libgit2一无所知。)
我正在尝试为我的开源项目移植一些 git
依赖的东西到 libgit2
。
其中一个 git
调用非常奇怪:
git log --topo-order --no-color --parents --boundary -z --pretty=format:%m%HX%PX%n%cn<%ce>%n%an<%ae>%n%at%n%s%n%b HEAD --all
首先,我对格式字符串很感兴趣。
H
之后的 X
是什么意思?我无法在官方 git 网站上找到 X
说明符:/
第二个问题 - libgit2
可以进行这种复杂的格式化,还是我应该自己处理?
P.S。但是,我很确定它不能:)
X
不是格式说明符。
--pretty=format:
或 --pretty=tformat:
的参数(大多数用户需要 tformat
,但此代码使用 -z
,它在每次提交后添加一个 NUL 字符)包含指令,如%m
和%H
,以及简单转录的文字:
$ git log -n 3 --pretty=tformat:hello%x25world
hello%world
hello%world
hello%world
在这里,hello
和 world
字符串被简单地复制,而 %x25
被解释。因为它表示 "print character with hex code 25" 是百分号 %
,并且 -n 3
告诉 git log
在记录三个提交后停止,所以我们得到了 hello%world
的三个副本。
字面值 X
有效是因为 %m
打印了一个不是 X
的字符,%H
和 %P
打印了不包含 X
,并且 %n
打印一个换行符——因此无论读取此输出的是什么,都可以确保每个提交都以标记字符、一个 X
、提交哈希、另一个 X
、和每个父散列之间有一个 space,然后是一个换行符。
%s%n%b
序列不是完全必要的(可以简单地使用 %B
代替)。不过,我不确定这是否会调整 "unusually formatted" 提交的方式——不是单个主题行,后跟一个换行符,然后是一个提交主体——出来。应该是吧。
(我对libgit2一无所知。)