我已阅读this和this,但仍然认为它们模糊不清。到目前为止理解:
git notes add -m "a note"
)问题:
push
(example)如何才能实现?它下面的机制是什么?如果不是提交,那么在概念上添加什么?push
条记录?git log
获取它们并在我的本地视频上看到它们?感谢
答案 0 :(得分:10)
我在这里写了更多关于他们的信息,作为git tip of the week series的一部分。
http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html
注释本身是blob,存储在单独的ref文件(refs/notes/commits
)中,并由它们指向的提交进行组织(因此git ls-tree refs/notes/commits
)给出了一个树对象(想想:目录)和内容)每个目录名称是他们指向的东西,每个值都是一个包含notes消息本身的blob。
你可以在GitHub中看到Gerrit使用JGit评论树(使用refs/notes/review
而不是refs/notes/commit
,但基本上完全相同的原则)的评论说明,请点击此处:
https://github.com/eclipse/jgit/tree/refs/notes/review
由于它也是一个引用,并且文件内容的增量与提交一起存储,您可以看到各个注释被更改,例如:
https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc
请注意,文件名称显示为对象的路径;在上面的例子中,de70...
是添加消息的提交,但提交的内容正在更改与此提交相对应的文件3a/bf...
:
https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129
如果您将评论链接追溯到原始的Gerrit来源:
https://git.eclipse.org/r/#/c/54632/
您会看到评论数据与notes元素的数据相对应。
至于它们是否干净地合并 - 因为每个注释对应于每个提交,并且每次提交在更改后都是不可变的,并且注释提交基于每个目录/文件,您可以轻松地为不同的提交重叠提供多个注释不用担心合并冲突。但是,如果两个程序/进程更新相同的提交注释,那么您可能会遇到需要以与任何其他DVCS合并相同的方式解决的合并问题。
一般来说,需要存储正交信息的程序应该使用自己的笔记空间,就像Gerrit对refs/notes/review
所做的那样。因此,如果您有refs/notes/program1
和refs/notes/program2
,则永远不会发生碰撞。