1

我有一种情况,我试图使用以下方法获取远程 git 注释:

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

在存储库的全新克隆上,这可以正常工作。它拉下 2 个注释命名空间:

> git fetch origin refs/notes/"*":refs/notes/"*"                                                                                                                    <system> <dev>
From ssh://url/android-client
 * [new ref]         refs/notes/git-ratchet-1-3.2 -> refs/notes/git-ratchet-1-test
 * [new ref]         refs/notes/git-ratchet-1-dev -> refs/notes/git-ratchet-1-test2

但是,在我当前的项目存储库中,当我执行该获取时,我只得到一个参考。如果我手动删除文件.git/refs/notes/git-ratchet-1-test并再次尝试获取,我会拉下该文件/引用。

为什么我不拉下另一个/refs/notes/git-ratchet-1-test2

4

1 回答 1

1

关键在这里:

如果我手动删除 .git/refs/notes/git-ratchet-1-test 中的文件并尝试再次获取...

您正在手动提供 refspec, refs/notes/*:refs/notes/*. 这是一个“非强制”的 refspec,意思是:“如果我已经有一个 ref,不要更新我的,保留我现有的 ref”。

要使其成为强制更新的 refspec,请+在前面添加一个。

如果您总是希望获取笔记(强制或不强制),请更新您git config的远程以将该 refspec 添加到fetch集合中。例如,而不是:

[remote "origin"]
    url = git://git.kernel.org/pub/scm/git/git.git
    fetch = +refs/heads/*:refs/remotes/origin/*

你可以这样读:

[remote "origin"]
    url = git://git.kernel.org/pub/scm/git/git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/notes/*:refs/notes/*

(每个遥控器,您可以拥有任意多的fetch =线路)。

于 2015-10-08T19:59:19.883 回答