有没有办法区分从不同遥控器获取的同名标签?

 gaoming1010_143 发布于 2023-02-13 12:36

我正在使用read-tree来克服裸仓库在推送到服务器部署时不能使用子模块问题,但现在我有点卡在我正在使用的两个repos有标记版本号的地方.我需要的是一些树形方式来引用包含远程名称的标签,但我看不到任何明显的东西.就像是:

git read-tree --prefix=api/framework/ -u framework/1.6.5

框架是其中一个遥控器.但只有这样才有效:

git read-tree --prefix=api/framework/ -u 1.6.5

然而另一个远程我有相同的标签...而git标签列出了一个列表中的所有标签

任何想法,将不胜感激.

1 个回答
  • 这里问题的根源是标签没有像分支那样的"远程标签名称空间".

    当你运行时git fetch,它会查询遥控器并根据线路引入参考.通常只有一个:git config --get-all remote.name.fetch

    $ git config --get-all remote.origin.fetch
    +refs/heads/*:refs/remotes/origin/*
    

    因此,git fetch带来refs/heads/master但安装它refs/remotes/origin/master.

    Git总是知道在remotes/名称空间中寻找"远程分支".

    当你运行时git fetch --tags,这会增加:

    refs/tags/*:refs/tags/*
    

    作为refspec(并且还绕过该remote.origin.fetch部分),但它将所有标签带入(单个)refs/tags/名称空间.换句话说,遥控器不是名称的一部分; 您和远程都使用单个全局"标记"名称空间.

    您可以以不同方式配置您的仓库,添加额外的行:

    git config --add remote.origin.fetch '+refs/tags/*:refs/rtags/origin/*'
    

    这将创建一个新的本地引用名称空间refs/rtags/.由于您已将遥控器的名称作为顶级条目rtags,因此您可以为另一个遥控器配置不同的子空间:

    git config --add remote.rmt2.fetch '+refs/tags/*:refs/rtags/rmt2/*'
    

    现在,当你运行git fetch origin它时会将原始标签带入as rtags/origin/,git fetch rmt2并将这些rmt2的标签带入rtags/rmt2/.

    Git的没有知道rtags(我们只是做它在这里!),所以你必须把这些作为rtags/origin/foo,等等,甚至refs/rtags/origin/foo在一些(罕见)病例.

    (略去+,以防止标签强制更新.这不是一般应该发生的,用户不应该从一个SHA-1移动标签到另一个,但+fetch行的意思是"如果他们改变了它,利用新的一个".既然你现在把它们放到了一个"远程标签"空间,我想你可能希望它们强制更新一个远程分支名称.注意这些也会自动修剪,就像远程分支一样,如果你跑git fetch -pgit remote prune.那是独立的+.)

    2023-02-13 12:37 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有