小编jfm*_*att的帖子

将多个Git存储库与标记合并

我正在使用许多不同的Git repos,需要合并在一起.工作流程如下所示:

git remote add fork1 ...
git remote add fork2 ...
git fetch fork1
git fetch fork2
git merge fork1/master fork2/master
Run Code Online (Sandbox Code Playgroud)

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

git merge fork1/v1.0.0 fork2/v2.1.0
Run Code Online (Sandbox Code Playgroud)

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

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

这个答案之后,我一直在研究使用refspec来解决这个问题.到目前为止,我已经提出以下建议:

git fetch fork1 refs/tags/*:refs/tags/fork1/*
Run Code Online (Sandbox Code Playgroud)

这具有使fork1的v1.0.0标签到达的预期效果fork1/v1.0.0.不幸的是,它以非命名空间的形式出现v1.0.0; git fetch在标记映射部分打印出两倍的行,并且git merge v1.0.0仍然与提取的标记合并.我无法在任何地方找到关于refspecs的好文档(Git关于该主题的文档非常无用).

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

如果我只是愚蠢地谈论这个问题,我也会接受其他工作流建议.我有一个核心仓库,它包含共享组件和结构,以及一些模块repos,它们是核心的完整克隆,只添加了代码.我目前的计划是让每个模块都有一个指向核心的远程指针(以保持共享部分的最新状态)以及它所依赖的每个其他模块.共享位将合并,因为它们是相同的,并且模块位将合并,因为它们是独立的.我应该遵循另一种模式吗?(我避免使用子模块,因为(a)我从来没有听说过有关它们的任何好处,而且(b)共享部分是项目目录结构的顶级部分,这使得repo结构非常笨拙.)

tags git multiple-repositories refspec

4
推荐指数
1
解决办法
888
查看次数

标签 统计

git ×1

multiple-repositories ×1

refspec ×1

tags ×1