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

我有

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.是的,我意识到无论我做什么,我都要编辑一些文件并使编程“通用”等等.我不介意这一点.我只是想找到自动化或半自动化的方法 – 完成整个事情.)

最佳答案 在将它们提交给svn之后合并代码库有一个优点,即您之后可以访问它们的历史记录:您将能够看到代码的哪些部分来自“.com”版本,来自“.net”,以及在两者结合的过程中做了哪些改变.

一种方法:

>将“.com”代码库导入新的存储库作为trunk.
>从该主干创建一个分支:svn cp svn:// repo / trunk svn:// repo / branches / net
>检查分支,复制“.net”代码,根据需要执行svn添加和删除,以便分支包含.net版本.承诺.
>查看trunk和svn merge ^ / branches / net.
>非常仔细地检查svn diff的输出,并编辑trunk checkout,使其成为您统一的大型代码库.

第5步的难度将在很大程度上取决于具体的代码库.

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

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

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

点赞