将更改从一个存储库合并到许多其他存储库

时间:2011-10-13 12:57:18

标签: svn merge

我将提供一些信息,以便您可以了解我的情况,请耐心等待:

我4个月前就开始在这个工作场所工作了。他们有一个可以安装在许多主机上的内部目录引擎。我带来了SVN,因为我比较习惯使用它,合并,分支等等。

目录的一个大问题是应该在所有最终用户之间共享的核心代码是垃圾,非常废话。你不能真正拥有一个核心,它带有模板,配置和其他所有混合的东西。

此外,我的老板,想要将所有不同的客户分成不同的存储库(我可能会说这是合乎逻辑的)但是因为我不能拥有目录的一个主副本,所以当我需要合并更改时它会变得很糟糕从主存储库到不同的客户端。一个简单的1-10行更改可以在9个目录中完成,但今天我的任务是为它添加一个完整的支付处理器功能,它给了我大约700行35个文件来修改......

我现在尝试搜索一小时如何将我的主分支@ rev54中的更改合并或重放到任何其他存储库@rev ???但我得到的是非常漫长的等待时间和冲突报告,或者我遇到“X不在存储库Y”消息中的问题。

这是我试过的:

搜索:Svn合并在不同的存储库中进行更改 搜索:Svn重播更改到另一个存储库 搜索:Svn合并存储库更改

阅读StackOverflow上的无数帖子

阅读无数博客文章

尝试:cd client1 / cat /; svn merge --dry-run http://svnserver/svn/mainbranch/trunk@54 尝试:cd client1 / cat /; svn merge --dry-run http://svnserver/svn/mainbranch/trunk@54 http:// svnserver / svn / clientbranch / trunk @ 5。

从svn红皮书中看到“高级合并”文档,似乎没有什么能给出简单的“重放”结果。

我想要的是从主分支中获取REV54的更改,并将其应用于不同版本的其他目录,但源代码非常相似。 (某些模板可能是自定义的)

4 个答案:

答案 0 :(得分:2)

好吧,毕竟它似乎比实际上更难,我能够通过简单的方式解决它:

CD "directory you merge into"
svn merge -r"lastrev":HEAD <URL TO THE PATH TO MERGE>

它有效。我确实得到了卡车的冲突,但这与我试图合并的变化有关,而且一些已经存在于新项目中但总的来说我认为我确实做对了,我将能够对所有目录应用核心更改现在开始。

Obvioulsy,尽可能快,我们将获得一个可以在子目录中检出的核心,但是现在,这个解决方案可行。

希望以后有人帮助

答案 1 :(得分:1)

不是你想听到的,但使用Git或HG这种情况会更容易。

在git中,你所谈论的是一个中央仓库,所有客户机仓库都可以合并,只是将它作为一个额外的遥控器,他们偶尔会取/拉。或者,您也可以使用cherry pick命令将更改从一个repo移动到另一个repo。

在SVN中,我猜想通过导出补丁并将其应用于客户端同时希望它们正常工作,这是最容易实现的,我永远不会记得一个顺利进行的大型Svn合并。

编辑:根据什么是“核心”,您可以使用SVN外部代码将所有核心文件放在同一个存储库中。但这会消除每个客户对核心的变化。

答案 2 :(得分:0)

您可以拥有一个包含所有客户端的存储库。

例如:

/core/trunk/....
/client_a/trunk/...

为每个客户提供vendor分支也许值得:

/client_a/vendor/...

client_a中的供应商分支将从上次合并中/core/trunk(或/core/branches/etc)。通常,当您进行自己的修改时,可以使用供应商分支来跟踪上游存储库中的更改。这允许您稍后在没有冲突的情况下合并更改,从上游存储库到供应商分支。进入供应商分支后,您可以轻松地将当前供应商版本与之前的版本区分开来,以计算您需要进行的更改。

您可以将每个客户端问题视为此问题的变体。其中core是上游供应商,每个客户端都是下游的自定义。


如果您无法创建单个存储库,则上述内容仍然适用。再次将“核心”视为上游供应商分支。将更改提取到客户端特定的存储库时,检查客户端的供应商分支并用核心中的最新副本替换当前位于其中的所有内容,然后提交。在此之后,您可以将vendor@headvendor@prev之间的差异合并到该客户端的主干中。

请参阅版本控制中的Vendor Branches和Subversion一书。

答案 3 :(得分:-4)

  • 将您的单个提交导出为补丁
  • 将补丁应用于clent的代码(解决问题)

合并存储库(搜索关键字为merge svn repositories)会提供此类链接

  1. How to Merge Two SVN Repositories
  2. Merge SVN Repositories