文件指出git-commit-tree
以下内容:
A commit encapsulates:
all parent object ids
author name, email and date
committer name and email and the commit time.
但是,该-S
标志的存在和在野外观察到的提交包括一个gpgsig
标题,这在上面的列表中没有提及。
此外,文档暗示提交可能还包含一个encoding
标题,尽管我还没有在现实中看到过。
使用上述设置创建的提交对象会在其编码标头中记录 i18n.commitEncoding 的值。这是为了帮助其他人稍后查看它们。缺少此标头意味着提交日志消息采用 UTF-8 编码。
Pretty Formats文档列出了可以从提交中提取的信息,但并未声明这些信息是否详尽。
可能的标题和有效值的完整列表是否记录在任何地方?
或者,编写对可能的标题集做出假设的代码是否不安全?
那将是源头。
commit.c
显示“gpgsig-sha256”和“mergetag”是其他可能性;我已经看到了mergetag,我认为它是linux提交。编写认为自己知道所有可能的标头条目的代码肯定是不安全的。可以根据需要添加新的条目,这就是上面提到的三个条目,我忘了是什么时候,但也不是很久以前了。
标题格式遵循一个历史悠久的惯例:它以一对换行符结束;每个条目都以非空白字符开头,第一个单词是条目名称,任何以空格开头的附加行都会被连接起来,就好像它们已经被自动换行了一样(它们确实有),结果就是条目值。
换行符对后面的所有内容都是消息本身。可以安全地预期新的标头条目遵循此约定。我有足够的信心对该格式的期望进行硬编码,并且第一个条目将始终按该顺序为树、任何父母、作者、提交者。