代码之家  ›  专栏  ›  技术社区  ›  merlin2011

git commit中可能的所有头文件及其顺序是否都有记录?

git
  •  1
  • merlin2011  · 技术社区  · 3 月前

    这个 documentation 属于 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 header,上面的列表中没有提到。

    此外,文档暗示提交还可能包括 encoding 头球,尽管我还没有在野外看到过。

    使用上述设置创建的Commit对象在其编码头中记录i18n.commitEncoding的值。这是为了帮助以后看它们的人。缺少此标头意味着提交日志消息是以UTF-8编码的。

    这个 Pretty Formats 文档列出了可以从提交中提取的信息,但没有声明这些信息是否详尽无遗。

    是否在任何地方记录了可能的标头和有效值的完整列表?

    或者,编写对可能的标头集进行假设的代码是否不安全?

    1 回复  |  直到 3 月前
        1
  •  1
  •   jthill    3 月前

    是否在任何地方记录了可能的标头和有效值的完整列表?

    这将是来源。 commit.c 显示“gpgsig-sha256”和“mergetag”是额外的可能性;我见过mergetag,我认为这是linux提交。

    编写自认为知道所有可能的头条目的代码绝对是不安全的。可以根据需要添加新的,上面提到的三个,我忘了是什么时候,但不是很久以前。

    标题格式遵循一个历史悠久的惯例:它以一对换行符结尾;每个条目都以一个非空的第一个字符开头,第一个单词是条目名称,任何带有前导空格的额外行都会被连接起来,就像它们被换行一样(它们有),结果就是条目值。

    换行符对之后的所有内容都是消息本身。它 可以放心地期待新的标头条目遵循此约定。我有足够的信心对这种格式的期望进行硬编码,并且第一个条目将始终是树、任何父节点、作者、提交者,按此顺序排列。