解码git log复杂的格式

时间:2016-08-24 06:11:47

标签: git 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

首先,我对格式字符串感兴趣。 X之后的H是什么意思?我无法在官方git网站上找到X说明符:/ 第二个问题 - libgit2可以执行这种复杂的格式化,或者我应该自己处理它吗?

P.S。但是,我很确定它不能:)

1 个答案:

答案 0 :(得分:2)

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被解释了。因为它意味着&#34;打印字符,十六进制代码为25&#34;这是百分号%-n 3告诉git log在记录三次提交后停止,我们得到了三份hello%world

文字X有效,因为%m打印的一个字符不是X%H%P打印不包含{{1}的哈希}和X打印一个换行符 - 所以读取此输出的任何内容都可以确保每个提交都以标记字符开头,%n,提交哈希,另一个X,每个父哈希在每个哈希之间有一个空格,然后换行。

X序列并非完全必要(可以简单地使用%s%n%b)。不过,我不确定这是否会影响&#34;异常格式化的方式&#34;提交 - 那些不是单一主题行,后跟换行符,然后是提交主体 - 出来。它可能会。

(我对libgit2一无所知。)