使用标签合并多个Git存储库



我正在处理许多不同的Git repo,这些repo需要合并在一起。工作流程如下所示:

git remote add fork1 ...
git remote add fork2 ...
git fetch fork1
git fetch fork2
git merge fork1/master fork2/master

这一切都很好,但我希望能够使用标签对每个远程进行特定的提交:

git merge fork1/v1.0.0 fork2/v2.1.0

永远不应该有任何合并冲突,因为每个回购都将其更改限制在一个子文件夹中,但即使存在,章鱼合并也会导致整个事务原子性失败。

问题与标记引用有关。正如这篇博客文章(不是我的)中所描述的,所有标签都莫名其妙地被转储到一个全局命名空间中。没有办法说fork1/v1.0.0——它只是v1.0.0,如果多个存储库具有相同的标签,它们就会相互挤压。

根据这个答案,我一直在研究使用refspec来解决这个问题。到目前为止,我已经提出了以下内容:

git fetch fork1 refs/tags/*:refs/tags/fork1/*

这具有使fork1的v1.0.0标签作为fork1/v1.0.0到达的预期效果。不幸的是,它作为未命名的v1.0.0到达;git fetch在标签映射部分中打印出两倍多的行,而git merge v1.0.0仍然与提取的标签合并。我在任何地方都找不到关于refspecs的好文档(Git关于这个主题的文档毫无用处)。

如何防止来自多个存储库的标记相互冲突

如果我只是愚蠢地做这件事,我也愿意接受其他工作流建议。我有一个核心repo,它包含共享组件和结构,还有一些模块repo,它们是核心的完整克隆,只添加了代码。我目前的计划是,每个模块都有一个指向核心的远程指针(以了解共享部分的最新情况),以及它所依赖的每个其他模块。共享位将合并,因为它们是相同的,模块位将合并。这里还有其他我应该遵循的模式吗?(我避开了子模块,因为(a)我从来没有听说过关于它们的好消息,(b)共享部分是项目目录结构的顶级部分,这使得repo结构非常尴尬。)

--no-tags与一起使用是否有效

git fetch fork1 refs/tags/*:refs/tags/fork1/* --no-tags

这将把fork1的标签放到refs/tags/fork1中,而不把它们放到refs/tag中。

相关内容

  • 没有找到相关文章

最新更新