我正在使用read-tree合并三个git repos。标签名称冲突。有没有办法从遥控器'获取'并在发生冲突时映射标签名称?
答案 0 :(得分:3)
是的,有点(所以也许“不”更准确,但你可以通过工作获得你想要的东西)。也就是说,没有办法将标签有条件地映射,但是很容易映射标签总是。
当您运行git fetch remote
(没有--tags
)时,git fetch
使用remote.remote.fetch
下的配置条目来控制提取哪些引用名称。当您运行git fetch remote --tags
时,它的行为就像您在命令行上给它refs/tags/*:refs/tags/*
一样,或者等效 - 就好像配置中的所有条目都被临时替换为那个单个refspec一样。
查看分支的实际refspec,您会看到,例如,remote.origin.fetch
设置为+refs/heads/*:refs/remotes/origin/*
。 1 +
导致强制更新(即,即使结果不是快进,也会更新),其余部分会将远程refs/heads/master
复制到您的本地refs/remotes/origin/master
(如果需要,可以创建它)。
标签位于refs/tags/
名称空间(vs分支,refs/heads/
和refs/remotes/
中的远程分支)。没有“远程标签”这样的东西,但你可以弥补它,过去没有“笔记”这样的东西,现在有一个refs/notes/
名称空间。所以:
git config --add remote.origin.fetch 'refs/tags/*:refs/rtags/origin/*'
会在remote.origin.fetch
的配置中添加一行,以使git fetch origin
带来他们的标记,但将它们存储在这个新的“远程标记”名称空间中。
一旦获取完成(并且您已为其他遥控器运行其他提取),您可以为refs/rtags/*
中的任何结束做自己的映射。
1 假设您没有设置为镜像。