【问题标题】:Svn merging branch to trunk keeping the old branchSvn合并分支到主干保留旧分支
【发布时间】:2012-11-10 17:16:41
【问题描述】:

我按照以下步骤将我的分支合并到主干。

查看主干副本:

svn co svn+ssh://server/path/to/trunk

查看您要合并的分支的副本:

svn co svn+ssh://server/path/to/branch/myBranch

将您当前的工作目录更改为“myBranch” 找到修订版“myBranch”开始于:

svn log --stop-on-copy

这应该向您显示在分支被切断时所做的更改。记住这个数字(应该是 rXXXX,其中 XXXX 是修订号)。 将当前工作目录更改为 trunk # 执行 SVN 更新:

svn 起来

这会将您的主干副本更新到最新版本,并告诉您当前的版本。还要记下该数字(应该说“在修订 YYYY”,其中 YYYY 是您需要记住的第二个数字)。 现在我们可以执行 SVN 合并了:

svn merge -rXXXX:YYYY svn+ssh://server/path/to/branch/myBranch

合并后,如果我签入结果,我的分支是否应该被删除? 我需要保留我的分支(我需要在这个旧分支中继续开发)。

【问题讨论】:

    标签: svn merge branch trunk


    【解决方案1】:

    我不确定你在做什么。您只需要签出您要合并的分支。无需检查两个分支、进行切换、更改工作副本、记录日志等。这确实是一个相当简单的过程:

    • 您从original 分支(通常为trunk,但不一定总是如此)创建一个分支(我们将称为copy 分支)。
    • 您可以在 originalcopy 分支上进行工作,具体取决于您的开发技术。
    • 当您想要进行合并时,您可以检出要合并到的分支的副本。毕竟,这是获得更改的分支。您希望在将这些合并的更改提交回存储库之前对其进行测试。
    • 要进行合并,您只需在工作副本上使用svn merge 命令。如果您从 original 分支合并到 copy 分支,则不要使用 --reintegrate 开关。如果您要从 copy 分支合并到原始分支,则使用 --reintegrate 开关。

    仅此而已。您可以选择要合并的修订,也可以简单地允许合并所有更改。 Subversion 合并非常好,Subversion 在跟踪合并方面做得非常好。

    我建议你阅读 Subversion 手册中关于 branching and merging 的章节。

    你需要删除你合并的分支吗?不会。从 1.5 版开始的 Subversion 不会复制已经发生的合并。

    如果不再需要某个分支,您可以删除它。例如,我创建了一个 Release 1.2 分支。我做了 1.2.1 版和 1.2.2 版。但是,我的用户都没有使用 1.2.x 版,我不再对其进行任何工作。我可能会删除它,因为当我执行svn ls http://server/svn/branches 时,我不会看到它。作为 Subversion,如果删除它让我感到紧张,我可以把它移开。我可以把它移到http://server/svn/branches/OBSOLETE/1.2。这样,当我列出分支时它就不会出现,但如果我决定我真的非常需要它,它仍然存在。

    顺便说一句,Subversion 从来没有真正永久删除任何东西。即使我删除了分支,我也总能把它找回来。

    【讨论】:

    • 1. 非常小心使用 --reintegrate 开关,因为在这样的合并之后,您将有效地永久关闭分支并且将来将无法使用它 2. 将分支从一个地方复制到另一个地方是浪费空间 - 您总是可以使用 BRANCH-URL@PEG-REVISION 语法 3 删除分支。OP 可能仍使用 1.5 之前的 SVN 客户端,其中需要一些技巧
    • 1)。自 1.6 版以来,重新集成的问题已得到修复。在--reintegrate 之后无需放弃分支。 2)。是的,你总是可以得到一个分支,我在回答中说过。不幸的是,许多开发组织对此感到不舒服。重新激活已删除分支的语法也有点晦涩。我知道,但开发人员不知道。移动分支是一个不错的折衷方案。它仍然存在,因此开发人员感觉更好,但它也不碍事,不会打扰任何人。
    • 这个答案已经过时了。请在下面查看我的答案,这些天事情要简单得多。
    【解决方案2】:

    使用 SVN 1.8,您想要做的事情相当简单,并且明确支持同步合并和自动重新集成。以下是命令(下面的文档和链接将确认这一点):

    cd path/to/branch/myBranch
    svn up
    svn merge ^/path/to/trunk  # usually just: svn merge ^/trunk
    svn ci -m "Merged changes from trunk."
    
    cd path/to/trunk
    svn up
    svn merge ^/path/to/branch/myBranch
    svn ci -m "Reintegrated branch."
    

    来自http://svnbook.red-bean.com/en/1.8/svn.branchmerge.basicmerging.html 的“重新集成分支”这样说:

    如果您在将分支重新集成到主干后选择不删除分支,您可以继续从主干执行同步合并,然后再次重新集成分支[37]。如果这样做,只有在第一次重新集成后对分支所做的更改才会合并到主干。

    【讨论】:

      【解决方案3】:

      您可以随时从您的分支合并到主干,如果您仍然需要它,您不必删除它。但是,我会从主干合并到您的分支中,以便您也跟上主线开发。这样做还可以让您使用 SVN 的重新集成分支功能,这应该会使从分支合并到主干的更改更容易一些。

      【讨论】:

      • 因此,如果我按照上述步骤将我的分支合并到主干(没有 --reintegrate 选项),我仍然会激活分支。这是它的工作方式吗?如果我使用 --将我的分支合并到主干时重新集成选项?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2018-11-08
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      相关资源
      最近更新 更多