How to show remote refs/notes/* with git log

问题描述 投票:0回答:4

如何在遥控器的

refs/notes
输出中显示
git log --oneline --graph --all --decorate

使用上面的命令我只能看到我自己的

refs/notes/foobar
,但看不到远程ref.

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

git git-log git-notes
4个回答
1
投票

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


像大多数 git 命令一样,

git log
在本地 repo 上运行。 要查看遥控器上的笔记,您需要获取它们。

您可以通过说

手动执行此操作
git fetch origin refs/notes/*:refs/notes/*

你也可以将它添加到远程的获取 refspec 中,这样它就会自动发生。


1
投票

也许这更像是对 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

您仍然看不到远程注释的实际值(blob 内容),如其他答案中所述,因为必须获取它们,但使用

ls-remote
意味着您至少知道是否遥控器变了。


0
投票

首先让我们解释一下

git notes
是什么。

git commit

如您所知,每次您

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

如果稍后,我们尝试修改提交

git commit --amend
,sha-1 将更新,如下所示。内容还是一样,只是
SHA-1
不一样了


git notes

如上所述,对

commit
所做的任何修改都会影响 SHA-1,这就是 git notes 来拯救的地方。

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

如您所见,git notes 不是提交内容的一部分,并且像任何其他提交内容一样存储在

.git
文件夹下(本地在
refs/notes/
下)。

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

如何取笔记?

为了获取笔记,请使用以下带有以下 refspec 的获取命令:

# 手动取笔记
git 获取来源 refs/notes/*:refs/notes/*

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

0
投票

“远程”在这种情况下(git-log(1))最典型的意思是远程引用, 即

refs/remotes/*
。换句话说:

git log origin/main

查看属于

main
远程的
origin
分支的日志 你在本地获取的。

但这些仅适用于分支,不适用于其他参考,例如注释。所以有 没有开箱即用的解决方案。

你唯一能做的就是伪造你自己的远程命名空间并使用 那:

git fetch origin refs/notes/commits:refs/notes-remotes/commits
git log notes-remotes/seed
© www.soinside.com 2019 - 2024. All rights reserved.