【问题标题】:Git notes detailsGit 注释详细信息
【发布时间】:2026-02-13 16:50:02
【问题描述】:

我读过thisthis,但仍然认为它们晦涩难懂。到目前为止的理解:

  • 创作 (git notes add -m "a note")
  • 笔记是命名空间的

问题:

  1. notes 似乎没有创建提交,那么push (example) 对他们来说怎么可能呢?它下面的机制是什么?如果不是提交,什么是概念上的注释添加?
  2. 在哪里可以看到我在 Github UI 上的 push'ed 笔记?
  3. Github commit comments people can make 和 notes 功能之间有什么关系吗?
  4. 如果 Github cmets 注意到我如何通过git log 获取它们并在我的本地comp 上查看它们?
  5. 如果 Github cmets 不是笔记,它们是什么,是否可以获取它们?
  6. 笔记可以合并吗?怎么样?
  7. 在解决已编辑笔记的冲突方面是否有任何注意事项?
  8. 笔记是否还有其他问题/困难?

谢谢

【问题讨论】:

标签: git git-notes


【解决方案1】:

我在这里写了更多关于他们的文章,作为我的git tip of the week series 的一部分。

http://alblue.bandlem.com/2011/11/git-tip-of-week-git-notes.html

注释本身是存储在单独的 ref 文件 (refs/notes/commits) 中的 blob,并由它们指向的提交组织(因此 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

如果您将那里的评论链接追踪到原始 Gerrit 来源:

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

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

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

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

【讨论】:

  • Al,非常感谢您提供全面的答案和文章。 1) 我以前没有见过 /tree/ 网址(通常 Github 中的下拉菜单只显示分支/标签项。您如何从* github.com/eclipse/jgit 导航到此树视图?2)你知道在提交时笔记和对等 cmets 之间是否有任何联系?我们可以拉同行 cmets 吗?
  • /tree/ 视图是默认视图,当您单击分支/标签时您会看到它。*视图github.com/eclipse/jgit 实际上是github.com/eclipse/jgit/tree/master 的别名。您可以通过将 refs/notes/ 拉到本地存储库来拉下注释(根据我的块)。
  • 对不起,Al,我的意思是 refs 网址。不是tree 网址
  • @AlBlue gihub 是否有可能放弃对笔记的支持?我没有看到您在答案中给出的示例所附的注释。例如。我在github.com/eclipse/jgit/commit/…中没有看到任何注释
  • “notes”引用空间有不同的子目录,提交的默认子目录是refs/notes/commits 我相信(git-scm.com/docs/git-notes)。 Gerrit Review 系统使用refs/notes/review 代替,所以我不知道 GitHub 的基于 Web 的界面是否会看到它们——特别是因为我不知道 refs/notes 空间是否镜像到 GitHub。但是,当我回答这个问题时,GitHub 可能更新了他们的 UI 以不再显示它......