如何使用git log显示远程refs/notes/*

icomxhvb  于 2023-05-12  发布在  Git
关注(0)|答案(4)|浏览(191)

如何在远程的git log --oneline --graph --all --decorate输出中显示refs/notes
使用上面的命令,我只能看到自己的refs/notes/foobar,而看不到远程ref。
文档中没有提示任何我可能使用的命令。

zd287kbt

zd287kbt1#

  • 更新 * -因为评论显示这显然是不清楚的,我已经强调了我回答问题的地方。
    **和大多数git命令一样,git log在本地仓库上运行。**要查看远程仓库上的笔记,需要获取它们。

您可以手动执行此操作,方法是

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

您还可以将其添加到远程的fetch refspec中,以便自动执行。

xvw2m8pv

xvw2m8pv2#

也许这更像是对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意味着您至少对远程Notes是否已更改有一些了解。

p1iqtdky

p1iqtdky3#

首先,让我们解释一下**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内容一样获取它们。

如何取笔记?

要获取注解,请使用以下fetch命令和以下refspec:

#  Manually fetch the notes
**git fetch origin refs/notes/*:refs/notes/***

#  Add configuration to auto-fetch the notes every time you execute a simple fetch.
#  This will result in fetching the notes every time you fetch the remote.
**git config --add remote.origin.fetch +refs/notes/*:refs/notes/***
i5desfxk

i5desfxk4#

在这个上下文中(git-log(1)),“Remote”最典型的意思是远程引用,即refs/remotes/*。换句话说:

git log origin/main

查看您在本地获取的属于origin远程的main分支的日志。
但那些只适用于分支,而不是其他参考,如笔记。因此,没有开箱即用的解决方案。
你唯一能做的就是伪造你自己的远程命名空间并使用它:

git fetch origin refs/notes/commits:refs/notes-remotes/commits
git log notes-remotes/seed

相关问题