git - Refspec 消除本地和远程标签以及同名分支的歧义?
问题描述
假设我有一个带有标签1.2.3
和两个遥控器origin
以及每个fork
标签的工作副本1.2.3
,但所有三个实际上都指向不同的提交。此外,它们都有一个分支1.2.3
。
是否有一个完全限定的路径(refspec)允许您引用(或同样)1.2.3
已知的标签?fork
origin
git checkout 1.2.3
将切换到本地1.2.3
分支,并切换到git checkout tags/1.2.3
本地1.2.3
标签。但是有可能以某种方式签出远程标签1.2.3
吗fork
?我尝试了git checkout fork/tags/1.2.3
和git checkout refs/remotes/fork/tags/1.2.3
(路径规范错误)之类的方法,git checkout refs/remotes/fork/1.2.3
但是它检查了该名称的分支,而不是标签。
获取标签失败:
git fetch --tags
From https://...
! [rejected] 1.2.3 -> 1.2.3 (would clobber existing tag)
这是暗示 Git 不支持它吗?
解决方案
与分支不同,Git 不会为每个遥控器命名空间标签。如果您从任何远程获取标签,它们将存储在refs/tags/
命名空间中,类似于refs/heads/
您的本地分支。没有等效refs/remotes/<remote>/
于远程分支的命名空间。
使用标签的所有包含的工具都直接使用refs/tags/
,因此即使您决定手动将一些远程标签获取到不同的命名空间(如您问题的评论之一中所述),实际使用它们也会相当不舒服。但是,如果您想签出一些遥控器的标签,但实际上没有将它们用作适当的标签,您可以这样做。
有点假设人们在标记事物时会一起工作。如果您无法避免多人创建具有不同内容的相同标签,您可能需要就标签命名方案达成一致(例如 foo-1.1.2 和 bar-1.1.2)或根本不使用标签。
推荐阅读
- kubernetes - 如何在 kubernetes externalsecret CRD 中有多个 vault 挂载点
- python - 即使需要的模板在 /templates 中,Flask 也会抛出 TemplateNotFound
- c - CS50 Speller 可以正确处理最基本的单词
- python - 仅解析来自 Kafka Tool 的新数据
- javascript - 获取字符串内的内容类型
- go - 为什么会出现空字节?即使在“消毒”流之后
- amazon-web-services - 与远程主机关闭的 ec2 实例的连接
- c - 如何将结构成员数组复制到变量?
- javascript - Vue JS LifeCycle Hooks/Firebase 问题
- javascript - 通过“Vanilla JavaScript”添加和删除类给出错误