【发布时间】:2018-01-02 10:58:52
【问题描述】:
此命令获取所有标签:
git fetch origin --tags
此命令获取特定标签:
git fetch origin refs/tags/1.0.0
但是我做不到:
git checkout tags/2.3.18
如何获取单个标签然后执行结帐?
【问题讨论】:
标签: git git-checkout git-tag git-fetch
此命令获取所有标签:
git fetch origin --tags
此命令获取特定标签:
git fetch origin refs/tags/1.0.0
但是我做不到:
git checkout tags/2.3.18
如何获取单个标签然后执行结帐?
【问题讨论】:
标签: git git-checkout git-tag git-fetch
git fetch origin refs/tags/1.0.0
这失败了,因为它没有写入本地引用:它获得了远程的refs/tags/1.0.0,以及任何标签对象,提交等,需要与它一起去;它将这些放入FETCH_HEAD(所有git fetch 命令总是这样做);和......就是这样。它永远不会在 您的 存储库中创建引用 refs/tags/1.0.0,即使它获得了这样做所需的一切。
如果它尚不存在,则使其创建这样的标签:
git fetch origin refs/tags/1.0.0:refs/tags/1.0.0
冒号右侧的名称是 Git 将在存储库中使用的名称。您可以将此标记转换为名为@987654327@ 的分支,例如,将其命名为refs/heads/wacky。 (没有理由这样做。我描述这个只是为了说明。)
这是非强制获取,因此如果您已经拥有 refs/tags/1.0.0,您的 Git 将拒绝更新您的参考。如果您希望覆盖任何现有的1.0.0 标签,请使用:
git fetch origin +refs/tags/1.0.0:refs/tags/1.0.0
如果您希望获取所有标签,无论是否覆盖:
git fetch origin 'refs/tags/*:refs/tags/*'
带或不带前导加号。 (注意:引号只是为了保护 * 免受 shell 的影响。加号可以在引号内或引号外。事实上,引号本身可以放在任何地方,只要它们围绕所有星号或其他 shell 元-字符:
refs/tags/'*:refs/tags/*'
或者您可以使用反斜杠:
refs/tags/\*:refs/tags/\*
在所有情况下,我们只是保护敏感星号免受 shell 的“星号很好吃,让我们吃掉它们”功能。)
【讨论】:
--no-tags 告诉git fetch 不要自动获取它将获取的“额外”标签;使用 --tags 告诉它获取 all 标签。您也可以在配置中设置remote.<name>.tagOpt。
git fetch origin refs/tags/1.0.0:refs/tags/1.0.0。 --no-tags 解决了我的问题。非常感谢!
--no-tags 会抑制特殊情况代码。
git fetch origin refs/tags/1.0.0:refs/tags/1.0.0 的提示之前已经完成了git fetch origin refs/tags/1.0.0,您仍然可以使用命令git tag 1.0.0 FETCH_HEAD 创建标签(假设您没有'从那以后没有获取任何其他东西)。
我阅读了所有答案,但还没有提到一种语法糖。如果您只需要获取一个标签作为标签(稍后结帐),您可以编写,例如refs/tags/2.3.18:
git fetch origin tag 2.3.18 --no-tags
这是已经提到的快捷方式:
git fetch origin refs/tags/2.3.18:refs/tags/2.3.18 --no-tags
当然,如果您需要其他标签(根据默认行为)或者您已经在clone 命令或tagOpt 配置选项(@987654329 @)。
git fetch origin tag 2.3.18
【讨论】:
<refspec>的git help fetch手册页描述中有所提及。
当您为git fetch 指定显式引用时,您需要在您的refspec 中提供一个映射,或者您自己使用记录在FETCH_HEAD 中的获取的ID 做您想做的事情。
no-mapping-provided case 对获取的 refs 不进行默认处理的优点是,no-mapping-provided case 对获取的 refs 不进行默认处理。你可能会感激
git fetch origin v2.3.18
git tag v2.3.18 FETCH_HEAD # ← git tag !$ FE<TAB>
当您真的只想在本地存储库中设置一个标签,而不是源存储库中的几十个先前标签指向获取的历史记录时。
【讨论】: