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

时间:2018-04-27 15:05:00

标签: git git-log git-notes

如何在遥控器的refs/notes输出中显示git log --oneline --graph --all --decorate

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

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

3 个答案:

答案 0 :(得分:1)

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

与大多数git命令一样,git log在本地仓库上运行。 要查看遥控器上的音符,您需要提取它们。

您可以通过说

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

你也可以将它添加到遥控器的fetch refspec中,以便它自动发生。

答案 1 :(得分:0)

首先,要解释什么是 git notes

git commit

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

enter image description here

如果稍后,我们将尝试修改提交git commit --amend sha-1将更新,如下所示。内容相同,但SAH-1不同。

enter image description here

git notes

如上所述,对commit所做的任何修改都会影响SHA-1,这就是git笔记拯救的地方。

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

enter image description here

正如您所看到的,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/*

答案 2 :(得分:0)

也许这更是对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意味着您至少拥有一些遥控器是否已更改的想法。