在git中合并存储库时如何处理标记冲突

时间:2013-12-18 16:29:37

标签: git

我正在使用read-tree合并三个git repos。标签名称冲突。有没有办法从遥控器'获取'并在发生冲突时映射标签名称?

1 个答案:

答案 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 假设您没有设置为镜像。