在每个关于git对象的教程网站上,我将看到一个示例,其中git cat-file显示提交对象本身的样子,它通常类似于以下内容:
tree 552acd444696ccb1c3afe68a55ae8b20ece2b0e6
parent 6a1d380780a83ef5f49523777c5e8d801b7b9ba2
author John Doe <john.doe@exampler.com> 1326496982 -0600
committer John Doe <john.doe@exampler.com> 1326496982 -0600
Some commit message here.
如果顶部有其他(单行)数据字段,这会混淆git工具吗?我假设即使没有,这些字段也不会出现在git log中。
如果它可以有其他字段,哪个git plumbing命令可以让你创建它? git commit-tree似乎不灵活。
答案 0 :(得分:3)
git notes
会为任何提交添加任意注释。用法:git notes add <SHA>
,例如git notes add HEAD
。这将启动默认文本编辑器并允许您输入注释。您也可以使用与commit
相同的方式从CLI指定消息,即git notes add -m "my message" HEAD
。
如果您在记笔记后运行git log
,您会看到:
commit 06ca03a20bb01203e2d6b8996e365f46cb6d59bd
Author: Example User <example@gmail.com>
Date: Mon March 28 14:50:15 2016 -0700
commit message
Notes:
my message
Notes也可以给出名称空间。 This article有完整的文档。
答案 1 :(得分:2)
将数据附加到提交的传统方式是“预告片”:在提交消息末尾的特殊格式的行。 Signed-of-by
(docu)添加的git commit -s
行就是这样的预告片。
Git对这些有一些直接支持:
git interpret-trailers
(docu)是添加或解析这些行的助手git log
具有格式占位符%(trailers[:options])
(docu) git for-each-ref
还有一个%(trailers)
占位符(docu) 预告片与git notes
有一些区别:
git notes
是提交(或其他内容)的附件。git notes
并非默认设置。git cherry-pick
,git rebase
等移动。 git notes
...有时。答案 2 :(得分:0)
是的,您可以在其中完全放入更多名为“ git commit extra headers”的字段
那里。它们会以git cat-file -p
的形式出现,但是我看到的首先使用标准git客户端将它们放置在那里的唯一方法是
编辑git源并重新编译。
在
commit.h
,
有一个struct
用于额外的标题,以及在需要时添加它们的函数
提交,以便稍后阅读。
struct commit_extra_header {
struct commit_extra_header *next;
char *key;
char *value;
size_t len;
};
int commit_tree_extended(const char *msg, size_t msg_len,
const struct object_id *tree,
struct commit_list *parents,
struct object_id *ret, const char *author,
const char *sign_commit,
struct commit_extra_header *);
struct commit_extra_header *read_commit_extra_headers(struct commit *, const char **);
commit.c
包含“标准”标头字段的列表:
static inline int standard_header_field(const char *field, size_t len)
{
return ((len == 4 && !memcmp(field, "tree", 4)) ||
(len == 6 && !memcmp(field, "parent", 6)) ||
(len == 6 && !memcmp(field, "author", 6)) ||
(len == 9 && !memcmp(field, "committer", 9)) ||
(len == 8 && !memcmp(field, "encoding", 8)));
}
,其他所有内容都显示为“额外”标题。
快速查看源代码,这是我发现的唯一当前用法
是gpgsig
标头,用于在提交时包含GPG签名。
Kiln
Harmony,
现在已停止使用,kilnhgusername
和
kilnhgrawdescription
在这里。