【问题标题】:How to merge two seperate - yet similar - codebases into one SVN rep?如何将两个独立但相似的代码库合并为一个 SVN 代表?
【发布时间】:2010-10-23 15:01:07
【问题描述】:

我有

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: linux svn generics merge codebase


    【解决方案1】:

    在将代码库提交到 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)会容易得多,这也是上述第 5 步中普通 svn diff 的绝佳替代品。

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

    【讨论】:

    • 非常好的答案和我没想到的东西(即使用 same SVN 存储库的主干和分支)-谢谢!
    • 等待更多答案!可能不会出现:-/
    • 应该是主干上的一个分支(即 svn 副本)。所以它开始包含 .com 代码库。这样,当你在第 4 步合并时,你只需要处理两个代码库之间的差异。
    • 那么,我要在 (3) 之后提交分支吗?然后我该如何在(4)中进行合并?抱歉,这里是新手 :-(
    • 谢谢老兄。幸运的是,我一直走在正确的轨道上。酷!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2015-06-28
    • 2022-01-23
    相关资源
    最近更新 更多