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

时间:2010-10-23 15:01:08

标签: linux svn generics merge codebase

我有

www.example.com上的

/ var / www / cool_codebase我有

www.example.net上的

/ var / www / cool_codebase

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

我已将每个代码库下载到我的localhost,我的问题是:

如何将这两个文件夹合并到一个文件夹中,然后将其作为一个“统一代码库”提交到我的SVN中?

我应该将每个代码库放入自己的SVN存储库中,然后合并这些单独的存储库吗?或者我可以在 SVN之前合并代码库 - 例如使用一些linux命令 - 然后然后将其提交给SVN?

非常感谢任何想法或帮助。

我应该补充一点,最终结果将是一个“大型统一代码库”,我们可以将其部署到www.example.com和www.example.net,而不会出现任何问题。

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

1 个答案:

答案 0 :(得分:2)

将它们提交到svn之后合并代码库的优势在于您之后可以访问其历史记录:您将能够看到代码的哪些部分来自“.com”版本,来自“.net”,以及在将两者结合的过程中所做的更改。

一种方法:

  1. 将“.com”代码库导入新存储库作为trunk。
  2. 从该主干创建分支:svn cp svn://repo/trunk svn://repo/branches/net
  3. 检查分支,复制“.net”代码,根据需要执行svn addremove,以便分支包含.net版本。承诺。
  4. 查看主干和svn merge ^/branches/net .
  5. 非常仔细审核svn diff的输出,并编辑中继结帐,使其成为您统一的大型代码库。
  6. 第5步的难度将在很大程度上取决于具体的代码库。

    如果您碰巧访问了较旧的“共同祖先”版本(从中导出了两个代码库),那么您应该在步骤1中检查该版本,然后检入“.com”版本这使得svn在步骤5中执行自动“三向合并”,这可能会为您节省大量的手动工作。

    无论您采用何种方式,都需要手动编辑文件。使用良好的交互式合并工具(例如meld)可以更加轻松,这也是上面第5步的普通svn diff的一个很好的替代方案。

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