解码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

在这里,helloworld 字符串被简单地复制,而 %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一无所知。)