Git 备注详情
Git notes details
我读过 this and this 但仍然觉得它们晦涩难懂。到目前为止理解:
- 创作(
git notes add -m "a note"
)
- 注释已命名空间
问题:
- notes 似乎不会创建提交,那么
push
(example) 怎么可能呢?它下面的机制是什么?如果不是提交,从概念上讲,注释添加是什么?
- 在哪里可以看到我在 Github UI 上的
push
笔记?
- Githubcommit comments人们可以制作和注释功能之间有什么关系吗?
- if Github 评论 are 说明我如何通过
git log
? 获取它们并在我的本地 comp 上查看它们
- 如果 Github 评论 不是 注释,它们是什么,是否可以获取它们?
- 笔记可以合并吗?怎么样?
- 在解决已编辑笔记的冲突时有什么注意事项吗?
- 还有其他problems/difficulities有注释的吗?
谢谢
作为我的 git tip of the week series.
的一部分,我在这里写了更多关于它们的内容
http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html
笔记本身是存储在单独的参考文件中的 blob (refs/notes/commits
) 并由它们指向的提交组织 (因此 git ls-tree refs/notes/commits
) 给出一个树对象 (想想: 目录和内容),其中每个目录名称都是它们指向的内容,每个值都是一个包含注释消息本身的 blob。
您可以在 GitHub 中看到 Gerrit 在 JGit 审查树中使用审查笔记(它使用 refs/notes/review
而不是 refs/notes/commit
但本质上完全相同的原则)通过这里:
https://github.com/eclipse/jgit/tree/refs/notes/review
由于它也是一个 ref,并且文件内容的增量与提交一起存储,您可以看到正在更改的各个注释,例如:
https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc
请注意,文件名显示为对象的路径;在上面的例子中,de70...
是添加消息的提交,但是提交的内容正在更改文件 3a/bf...
对应于此提交:
https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129
如果你追查评论 link 到原始的 Gerrit 来源:
https://git.eclipse.org/r/#/c/54632/
您看到评论数据与注释元素的数据相对应。
至于是否合并干净——由于每个note对应每个commit,并且每个commit一旦更改就不可变,并且note commit是在per-directory/file基础上的,所以可以很容易的针对不同的notes进行多条note提交重叠而不用担心合并冲突。但是,如果两个 programs/processes 更新相同的提交说明,那么您可能会遇到需要以与任何其他 DVCS 合并相同的方式解决的合并问题。
一般来说,需要存储正交信息的程序应该使用自己的注释 space,就像 Gerrit 对 refs/notes/review
所做的那样。所以如果你有 refs/notes/program1
和 refs/notes/program2
你永远不会发生碰撞。
我读过 this and this 但仍然觉得它们晦涩难懂。到目前为止理解:
- 创作(
git notes add -m "a note"
) - 注释已命名空间
问题:
- notes 似乎不会创建提交,那么
push
(example) 怎么可能呢?它下面的机制是什么?如果不是提交,从概念上讲,注释添加是什么? - 在哪里可以看到我在 Github UI 上的
push
笔记? - Githubcommit comments人们可以制作和注释功能之间有什么关系吗?
- if Github 评论 are 说明我如何通过
git log
? 获取它们并在我的本地 comp 上查看它们
- 如果 Github 评论 不是 注释,它们是什么,是否可以获取它们?
- 笔记可以合并吗?怎么样?
- 在解决已编辑笔记的冲突时有什么注意事项吗?
- 还有其他problems/difficulities有注释的吗?
谢谢
作为我的 git tip of the week series.
的一部分,我在这里写了更多关于它们的内容http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html
笔记本身是存储在单独的参考文件中的 blob (refs/notes/commits
) 并由它们指向的提交组织 (因此 git ls-tree refs/notes/commits
) 给出一个树对象 (想想: 目录和内容),其中每个目录名称都是它们指向的内容,每个值都是一个包含注释消息本身的 blob。
您可以在 GitHub 中看到 Gerrit 在 JGit 审查树中使用审查笔记(它使用 refs/notes/review
而不是 refs/notes/commit
但本质上完全相同的原则)通过这里:
https://github.com/eclipse/jgit/tree/refs/notes/review
由于它也是一个 ref,并且文件内容的增量与提交一起存储,您可以看到正在更改的各个注释,例如:
https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc
请注意,文件名显示为对象的路径;在上面的例子中,de70...
是添加消息的提交,但是提交的内容正在更改文件 3a/bf...
对应于此提交:
https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129
如果你追查评论 link 到原始的 Gerrit 来源:
https://git.eclipse.org/r/#/c/54632/
您看到评论数据与注释元素的数据相对应。
至于是否合并干净——由于每个note对应每个commit,并且每个commit一旦更改就不可变,并且note commit是在per-directory/file基础上的,所以可以很容易的针对不同的notes进行多条note提交重叠而不用担心合并冲突。但是,如果两个 programs/processes 更新相同的提交说明,那么您可能会遇到需要以与任何其他 DVCS 合并相同的方式解决的合并问题。
一般来说,需要存储正交信息的程序应该使用自己的注释 space,就像 Gerrit 对 refs/notes/review
所做的那样。所以如果你有 refs/notes/program1
和 refs/notes/program2
你永远不会发生碰撞。