从远程存储库中获取单个标记

ale*_*son 18 git git-fetch git-checkout git-tag

此命令获取所有标记:

git fetch origin --tags
Run Code Online (Sandbox Code Playgroud)

此命令获取特定标记:

git fetch origin refs/tags/1.0.0
Run Code Online (Sandbox Code Playgroud)

但这不让我这样做:

git checkout tags/2.3.18
Run Code Online (Sandbox Code Playgroud)

如何获取单个标签然后执行结帐?

tor*_*rek 30

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
Run Code Online (Sandbox Code Playgroud)

冒号右侧的名称是Git将在您的存储库中使用的名称.例如,您可以wacky通过命名将此标记转换为名称的分支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
Run Code Online (Sandbox Code Playgroud)

如果您希望获取所有标签,无论是否覆盖:

git fetch origin 'refs/tags/*:refs/tags/*'
Run Code Online (Sandbox Code Playgroud)

有或没有领先的加号.(注意:引号只是为了保护*你的shell.加号可以在引号的内部或外部.实际上,只要它们包围所有的星号或其他shell元字符,引号本身就可以去任何地方:

refs/tags/'*:refs/tags/*'
Run Code Online (Sandbox Code Playgroud)

或者您可以使用反斜杠:

refs/tags/\*:refs/tags/\*
Run Code Online (Sandbox Code Playgroud)

在所有情况下,我们只是保护敏感的星号免受外壳的"星号好吃,让我们吃它们"的功能.)

  • 当我尝试git时,不仅要获取我指定的标签,还要获取所有历史标签(最多可以获取指定的?)。有没有一种方法可以将获取的标签数限制为1? (2认同)
  • @Sah:*确切地*,你运行了什么命令?使用`--no-tags`告诉`git fetch`不要自动获取“额外”标签,否则它会获取;使用`--tags` 告诉它获取*所有* 标签。您还可以在配置中设置 `remote.<name>.tagOpt`。 (2认同)
  • 我运行的是`git fetch origin refs/tags/1.0.0:refs/tags/1.0.0`。`--no-tags` 解决了我的问题。非常感谢! (2认同)
  • 我要补充的一件事是,如果您在看到有关使用“git fetch origin refs/tags/1.0.0: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` 创建标签(假设此后您没有获取任何其他内容)。 (2认同)

Oll*_*leg 25

我阅读了所有答案,但还没有提到一种语法糖。如果您只需要获取一个标签作为标签(稍后结帐),您可以编写,例如refs/tags/2.3.18

git fetch origin tag 2.3.18 --no-tags
Run Code Online (Sandbox Code Playgroud)

这是已经提到的快捷方式:

git fetch origin refs/tags/2.3.18:refs/tags/2.3.18 --no-tags
Run Code Online (Sandbox Code Playgroud)

当然,--no-tags如果您需要其他标签(根据默认行为)或者如果您已经--no-tagclone命令或tagOpt配置选项(man git-clone)中明确设置,您可能不会使用。

git fetch origin tag 2.3.18
Run Code Online (Sandbox Code Playgroud)

  • 作为参考,“<refspec>”的“git help fetch”联机帮助页描述中提到了这一点。 (2认同)