git日志复杂格式的解码
我正在尝试为我的开源项目将一些git日志复杂格式的解码,git,libgit2,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 git日志--拓扑顺序--无颜色--父项--边界-z--漂亮=格式:%m%HX%PX%n%cn%n%an%n%n%n%n%s%n%b
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
git日志--拓扑顺序--无颜色--父项--边界-z--漂亮=格式:%m%HX%PX%n%cn%n%an%n%n%n%n%s%n%b头--全部
首先,我对格式字符串很感兴趣。
H
之后的X
是什么意思?我在git官方网站上找不到X
说明符:/
第二个问题是,libgit2
是否可以进行这种复杂的格式化,或者我应该自己处理
但是,我很确定它不能:)这个
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
被解释。因为它的意思是“用十六进制代码25打印字符”,这是百分号%
,并且-n3
告诉git log
在记录三次提交后停止,我们得到了三份hello%world
文本X
之所以有效,是因为%m
打印一个不是X
的字符,%H
和%p
打印不包含X
的散列,%n
打印一个换行符,因此无论读取此输出的是什么,都可以确保每次提交都以标记字符X
开始,提交散列,另一个X
,每个父散列之间有一个空格,然后是换行符
%s%n%b
序列不是完全必要的(可以简单地使用%b
)。不过,我不确定这是否会调整“异常格式化”提交那些不是单一主题行的内容的方式,然后是换行,然后是提交正文。可能是的
(我对libgit2一无所知。)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
被解释。因为它的意思是“用十六进制代码25打印字符”,这是百分号%
,并且-n3
告诉git log
在记录三次提交后停止,我们得到了三份hello%world
文本X
之所以有效,是因为%m
打印一个不是X
的字符,%H
和%p
打印不包含X
的散列,%n
打印一个换行符,因此无论读取此输出的是什么,都可以确保每次提交都以标记字符X
开始,提交散列,另一个X
,每个父散列之间有一个空格,然后是换行符
%s%n%b
序列不是完全必要的(可以简单地使用%b
)。不过,我不确定这是否会调整“异常格式化”提交那些不是单一主题行的内容的方式,然后是换行,然后是提交正文。可能是的
(我对libgit2一无所知。)
X
这里似乎是一个分隔符,用于包装父提交id并将其与提交id分开。X
这里似乎是一个分隔符,用于包装父提交id并将其与提交id分开。感谢您对git命令的详细解释。关于libgit2——看起来,我应该试着直接询问这个库的作者……感谢您对git命令的详细解释。关于libgit2-看起来,我应该试着直接询问这个库的作者。。。