如何从其他存储库移植?

时间:2014-08-09 11:47:49

标签: mercurial

我有两个存储库,有不同的mercurual命名分支,比如说V1和V2。大约两年后,分支机构分歧。我想将一些回购集中的一些变更集移植到另一个回购集中,而不是拉动变更。

我不想出于多种原因提取更改。

  • 我不想与具有多个分支机构历史的开发人员发生冲突,因为会有足够的本地分支机构来关注。
  • 我想拥有单个分支中央回购,开发人员可能会意外地推动第二个分支。中心分支将与SVN交互,每个repo应该只有一个分支。我知道我可以使用中央挂钩,以防止这样的推动,但我不想要这样的问题,不能推,或我怎么能这样做。
  • 回购的大小将增加到几千兆字节(在拉大约700MB之前)。据我了解,这是因为当前的存储格式存在缺陷。

我知道,移植扩展可以完成这项工作。我尝试过,但我不能强迫其他开发人员处理拒绝,而不是简单地使用合并工具。还有其他方法吗?

事实上,每个分支都有两个以上的存储库,但是对于简单的例子,两个就足够了。

3 个答案:

答案 0 :(得分:1)

您可以在中间仓库中完成工作:

  1. 拉入更改
  2. 做你需要的嫁接/变基/移植
  3. 删除您在步骤1中提取的内容,或者如果这不起作用:
    1. 仅将所需分支的更改拉入实际的仓库
  4. 您最终会得到一个包含所需更改集的存储库,但不是所有不需要的分支的历史记录。

答案 1 :(得分:0)

@DanMan的后续行动

  1. 将所需的分支拉入中间回购
  2. 在克隆
  3. 中删除不需要的更改集 真实目标中的
  4. hg pull CLONE

答案 2 :(得分:0)

编写工具,hg扩展名或扩展移植命令,以便它可以从第二个存储库移植,类似于移植扩展。

是的,实现并不像在移植命令中添加第二个repo功能那么容易。移植扩展只是使用来自其他仓库的补丁,而不是来自自己的回购。但我认为,对于贪污,没有技术上的理由,不这样做。

如果我理解正确,嫁接单个文件更改只不过是使用文件调用合并工具:

  • (基础)移植变更集的父级
  • (我的更改)要移植的目标修订
  • (他们的)移植物重新分析

因此,为了从其他仓库移植文件更改,在应用to-graft变更集(基础)之前和应用之后(他们的),需要来自其他仓库的整个文件。从技术上讲,应该没问题。

此外还有实施

  • 需要确定哪些文件受变更集影响
  • 需要正确处理删除
  • 需要处理文件重命名(不确定,有多复杂)

所有这一切都应该可行,我认为没有真正的技术问题。