Git 注释细节

标签 git git-notes

我读过 thisthis但仍然认为它们晦涩难懂。据了解:

  • 创建(git notes add -m "a note")
  • 注释是有命名空间的

问题:

  1. notes 似乎不会创建提交,那么 push ( example ) 对他们来说是如何实现的呢?它下面的机制是什么?如果不是提交,从概念上讲,注释添加是什么?
  2. 在 Github UI 上哪里可以看到我的推送笔记?
  3. 与Github commit comments有关系吗人们可以制作和注释功能吗?
  4. 如果 Github 评论注释,我如何通过 git log 获取它们并在我的本地 comp 上查看它们?
  5. 如果 Github 评论不是注释,它们是什么,是否可以获取它们?
  6. 笔记可以 merge 吗?怎么样?
  7. 在解决已编辑笔记的冲突时有什么注意事项吗?
  8. 笔记还有其他问题/困难吗?

谢谢

最佳答案

作为我的 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) 给出一个树对象(想想:目录和内容),其中每个目录名称都是它们指向的东西,每个值都是一个包含注释消息本身的 blob。

你可以在JGit评论树中看到Gerrit对评论笔记的使用(它使用refs/notes/review而不是refs/notes/commit但本质上完全一样原理)在 GitHub 中,点击此处:

https://github.com/eclipse/jgit/tree/refs/notes/review

因为它也是一个引用,并且文件内容的增量与提交一起存储,您可以看到正在更改的各个注释,例如:

https://github.com/eclipse/jgit/commit/de70108c883afe563a48352c05cdd440c25f58cc

请注意,文件名显示为对象的路径;在上面的例子中,de70... 是添加消息的提交,但是提交的内容正在更改文件 3a/bf... 对应于这个 promise :

https://github.com/eclipse/jgit/commit/3abf35bc0fc7a1c130e8fec42083ffd21c342129

如果您将评论链接转到原始 Gerrit 来源:

https://git.eclipse.org/r/#/c/54632/

您会看到评论数据与 notes 元素的数据相对应。

至于它们是否干净地 merge - 因为每个注释对应于每个提交,并且每个提交一旦更改就不可变,并且注释提交是基于每个目录/文件的,因此您可以轻松地为不同的提交重叠多个注释不用担心 merge 冲突。但是,如果两个程序/进程更新同一个提交说明,那么您可能会遇到需要以与任何其他 DVCS merge 相同的方式解决的 merge 问题。

一般来说,需要存储正交信息的程序应该使用自己的注释空间,就像 Gerrit 为 refs/notes/review 所做的那样。因此,如果您有 refs/notes/program1refs/notes/program2,您将永远不会发生碰撞。

关于Git 注释细节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32269590/

相关文章:

git - 将自定义元数据存储在 Git 存储库中的单个文件中

git - 使用特定的 git note 查找提交

git - 本地 git checkin ——从主存储库中 stash ?

git - 在 Git 工作区中检测修改文件的简单方法是什么?

git - 修改后的文件出现在 Git 中但没有更新的问题?

git - 'git remote show'详解

git - 修改倒数第二个提交

Git 与 git 笔记 Hook 吗?