我在这里写了更多关于它们的内容,作为我的一部分本周 git 技巧系列 http://alblue.bandlem.com/Tag/gtotw/.
http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html
注释本身是存储在单独的引用文件中的 blob(refs/notes/commits
)并由它们指向的提交组织(所以git ls-tree refs/notes/commits
)给出一个树对象(认为:目录和内容),其中每个目录名称都是它们指向的东西,每个值都是包含注释消息本身的 blob。
你可以在 JGit 评论树中看到 Gerrit 对评论笔记的使用(它使用refs/notes/review
代替refs/notes/commit
但本质上是完全相同的原理)在 GitHub 中,请转到此处:
https://github.com/eclipse/jgit/tree/refs/notes/review https://github.com/eclipse/jgit/tree/refs/notes/review
由于它也是一个引用,并且文件内容的增量与提交一起存储,因此您可以看到各个注释正在更改,例如:
https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc
请注意,文件名显示为对象的路径;在上述情况下,de70...
是添加消息的提交,但提交的内容正在更改文件3a/bf...
对应于这个提交:
https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129 https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129
如果您追踪原始 Gerrit 来源的评论链接:
https://git.eclipse.org/r/#/c/54632/ https://git.eclipse.org/r/#/c/54632/
您会看到评论数据与注释元素的数据相对应。
至于它们是否干净地合并 - 由于每个注释对应于每个提交,并且每个提交一旦更改都是不可变的,并且注释提交是基于每个目录/文件的,因此您可以轻松地让不同提交的多个注释重叠,而不必担心合并冲突。但是,如果两个程序/进程更新相同的提交注释,那么您可能会遇到合并问题,需要以与任何其他 DVCS 合并相同的方式解决。
一般来说,需要存储正交信息的程序应该使用自己的注释空间,就像 Gerrit 所做的那样refs/notes/review
。所以如果你有refs/notes/program1
and refs/notes/program2
你永远不会发生碰撞。