【问题标题】:How to show remote refs/notes/* with git log如何使用 git log 显示远程 refs/notes/*
【发布时间】:2018-10-08 11:14:14
【问题描述】:

如何在git log --oneline --graph --all --decorate 远程输出中显示refs/notes

使用上面的命令,我只能看到我自己的refs/notes/foobar,但看不到远程参考。

文档没有提示我可能为此使用的任何命令。

【问题讨论】:

    标签: git git-log git-notes


    【解决方案1】:

    更新 - 由于评论显示这显然不清楚,我已经强调了我回答问题的地方。


    像大多数 git 命令一样,git log 在本地 repo 上运行。 要查看遥控器上的笔记,您需要获取它们。

    您可以通过说手动执行此操作

    git fetch origin refs/notes/*:refs/notes/*
    

    您也可以将它添加到远程的 fetch refspec,以便它自动发生。

    【讨论】:

    • 就像上面的答案:这根本不能回答我的问题。我问如何显示笔记的远程参考。我知道笔记是如何工作的,我知道如何获取它们以及如何推送它们。我想知道远程存储库对我的笔记有什么状态。您的回答虽然完全正确,但根本没有回答我的问题。
    • @musicmatze - 错了。我确实回答了你的问题。答案是“你不能”。我还添加了有关您可以做什么的信息。我实际上不在乎你已经知道了。此处的答案对将来可能搜索相同信息的任何人都有用。但别担心;我会跟踪那些对那些试图帮助他们的人粗鲁的用户,所以你不必担心我再次“不回答”你的一个问题。
    • 很抱歉,我的回复对你来说似乎很粗鲁,这不是故意的。但是不,回复没有回答我的问题:使用git log --decorate 我可以看到分支的远程引用。但是我看不到他们的笔记,即使笔记被提取了。所以你的回复没有回答我的问题,抱歉。
    • @musicmatze - 又错了。您看不到分支的远程参考。您可以看到本地 refs,告诉您上次获取远程分支的位置。抱歉,我确实回答了你的问题,而且答案是正确的,即使你不想这样。
    • 您声明,我引用:“要查看删除中的注释,您需要获取它们”。我把它们拿来了。我看不到遥控器在 ref/notes/foobar 参考上的位置。所以你的答案不正确。
    【解决方案2】:

    也许这更像是对 OP 在评论中所说的话的回答:

    我想知道远程存储库对我的笔记有什么状态。

    并且它没有解决在 git log 的输出中合并任何内容作为引用的原始问题:

    ...在git log --oneline --graph --all --decorate 输出...

    但其他讨论均未提及 ls-remote,我发现这有助于诊断 Notes 提取/合并/推送过程中的问题。

    例如当 Notes 似乎无法正确获取/合并/推送时,我要求用户运行以下命令,显示所有通常需要保持同步的 3 件事:

    • 第一个命令显示遥控器有什么。
    • 第二个命令显示您的远程跟踪参考。 (我在这里没有看到任何关于跟踪引用的参考,但我们发现它有助于让多人在 Notes 上工作。)
    • 第三个命令显示您的本地参考。
    MINGW64 ~/git/repo (master)
    $ git ls-remote origin refs/notes/* && git for-each-ref refs/notes/origin/* && git for-each-ref refs/notes/*
    b8a71bdc018808e3890800a452d3ac87a0f83261        refs/notes/releaseRollback
    e15b2bdc0183f791fcaf1da3b80e5125f58bae9a        refs/notes/sourceCommits
    b8a71bdc018808e3890800a452d3ac87a0f83261 commit refs/notes/origin/releaseRollback
    e15b2bdc0183f791fcaf1da3b80e5125f58bae9a commit refs/notes/origin/sourceCommits
    b8a71bdc018808e3890800a452d3ac87a0f83261 commit refs/notes/releaseRollback
    e15b2bdc0183f791fcaf1da3b80e5125f58bae9a commit refs/notes/sourceCommits
    

    如其他答案中所述,您仍然无法在遥控器上看到 Notes 的实际值(blob 内容),因为它们必须被获取,但使用 ls-remote 意味着您至少对遥控器是否变了。

    【讨论】:

      【解决方案3】:

      首先让我们解释一下git notes是什么。

      git commit

      正如您所知道的,每次将commit 编码到 git 时,git 都会记录文件的当前快照,并且提交对象将树和任何其他额外信息存储为提交元数据。然后将此元数据传递给sha1sum,我们得到提交ID<SHA-1>

      如果稍后,我们尝试修改提交git commit --amend,sha-1 将被更新,如下所示。内容还是一样,只是SHA-1不一样了。


      git notes

      如上所述,对commit 所做的任何修改都会影响 SHA-1,而这正是 git 注释来拯救的地方。

      git notes 允许我们在不影响提交的 SHA-1 的情况下添加要提交的内容,这意味着我们可以在不修改 SHA-1 的情况下将内容附加到提交。

      如您所见,git notes 不是提交内容的一部分,并且与任何其他提交内容一样存储在.git 文件夹下(本地在refs/notes/ 下)。

      为了从服务器获取笔记,您必须像获取任何其他 git 内容一样获取它们。

      如何获取笔记?

      为了获取注释,请使用以下 fetch 命令和以下 refspec:

      # 手动获取笔记
      git fetch origin refs/notes/*:refs/notes/*
      
      # 添加配置以在每次执行简单提取时自动提取注释。
      # 这将导致每次获取遥控器时都获取笔记。
      git config --add remote.origin.fetch +refs/notes/*:refs/notes/*

      【讨论】:

      • 这根本不能回答我的问题。我问如何显示笔记的远程参考。我知道笔记是如何工作的,我知道如何获取它们以及如何推送它们。我想知道远程存储库对我的笔记有什么状态。您的回答虽然完全正确,但根本没有回答我的问题。
      • 另外,您添加+refs/notes*:refs/notes/* 的建议很危险,因为+ 表示从远程获取时可以(并且将)覆盖本地笔记的当前状态。我以前遇到过这个。请不要在以后的答案中添加+(无意冒犯!我以前不知道这一点,我不认为你知道这一点!)
      猜你喜欢
      • 1970-01-01
      • 2014-01-19
      • 2012-12-06
      • 2018-10-04
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      相关资源
      最近更新 更多