4

我有

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

/var/www/cool_codebase 在 www.example.net

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

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

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

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

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

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

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

4

1 回答 1

2

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

一种方法:

  1. 将“.com”代码库作为主干导入到新的存储库中。
  2. 从该主干创建一个分支:svn cp svn://repo/trunk svn://repo/branches/net
  3. 检查分支,复制“.net”代码,svn addremove根据需要执行操作,以便分支包含准确的 .net 版本。承诺。
  4. 检查后备箱和svn merge ^/branches/net .
  5. 非常仔细地查看输出svn diff,并编辑主干结帐,使其成为您的统一代码库。

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

如果您碰巧可以访问旧的“共同祖先”版本,而这两个代码库都是从该版本派生的,那么您应该在步骤 1 中签入该版本,然后将“.com”版本签入到主干在第 4 步之前。这使 svn 可以在第 5 步进行自动“三向合并”,可能会为您节省大量手动工作。

无论您采用哪种方式,都需要对文件进行一些手动编辑。使用良好的交互式合并工具(例如meld )会容易得多,这也是svn diff上述步骤 5 中 plain 的一个很好的替代方案。

Note that meld has the ability to a) compare entire directory trees and b) compare and edit three versions at once. So you can point it at a a directory containing the ".com" code, one containing the ".net" code, and your working directory to see all three versions side by side.

于 2010-10-23T16:20:46.667 回答