如何将两个独立但相似的代码库合并为一个SVN代表?

我有

/ var / www / cool_codebase在www.example.com和我有

/ www.example.net上的/ var / www / cool_codebase

代码库是针对运行在不同服务器上的相同的Web应用程序。 代码库(客户端特定的位和bobs等)之间有一些专业化 – 但不是太多。 一个代码库有另一个不存在的文件,反之亦然。 一些编程也是不同的。

我已经下载每个代码到我的本地主机,我的问题是:

我怎样才能将这两个文件夹合并到一个文件夹,然后将其作为一个“macros伟的统一代码库”提交到我的SVN

我应该把每个代码库放入自己的SVN仓库,然后合并这些单独的仓库? 或者我可以合并SVN 之前的代码库 – 例如使用一些Linux命令 – 然后提交给SVN?

任何想法或帮助将不胜感激。

我应该补充一点,最终的结果将是一个“macros伟的统一代码库”,我们可以将这个代码库部署到www.example.com和www.example.net,而不会打嗝。

(PS:是的,我意识到无论我做什么,我都要编辑一些文件,使编程“通用”等等,我不介意这一点,我只是在寻找自动化或半自动化的方法 – 自动整个事情。)

在将代码提交到svn 之后合并代码库有一个好处,那就是你之后可以访问他们的历史记录:你将能够看到代码的哪些部分来自“.com”版本,从“.net”在两者结合的过程中发生了哪些变化。

一种方法来做到这一点:

  1. 将“.com”代码库导入到新的存储库中。
  2. 从该干线创建一个分支: svn cp svn://repo/trunk svn://repo/branches/net
  3. 签出分支,复制“.net”代码,按需要svn addremove svn add ,以便分支完全包含.net版本。 承诺。
  4. 检查出树干和svn merge ^/branches/net .
  5. 非常仔细地检查svn diff的输出,并编辑中继结帐,以便它成为您的统一代码库。

步骤5的难度将很大程度上取决于具体的代码基础。

如果您碰巧有权访问一个较老的“共同的祖先”版本,并从这两个版本中派生出两个代码库,那么您应该在步骤1中检查该版本,然后在“.com”版本中检查中继在第4步之前。这使得svn在第5步做一个自动的“3-way合并”,可能为你节省大量的手工工作。

无论采用何种方式,都需要手动编辑文件。 使用一个好的交互式合并工具,比如meld ,这对于上面的步骤5来说也是一个很好的替代方案。

请注意,meld能够a)比较整个目录树和b)一次比较和编辑三个版本。 所以你可以把它指向一个包含“.com”代码的目录,其中一个包含“.net”代码,而你的工作目录可以并排查看所有三个版本。