Svn合并分支到主干保持旧分支

时间:2012-11-10 17:16:42

标签: svn merge branch trunk

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

查看trunk的副本:

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 up

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

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

合并后,如果我检查了结果,我的分支会被删除吗? 我需要保留我的分支(我需要在这个旧分支中继续开发)。

3 个答案:

答案 0 :(得分:3)

我不确定你在做什么。您只需要检查要合并的分支。没有必要检查两个分支,切换,更改工作副本,做日志等等。这真的是一个非常简单的过程:

  • 你从原始分支(通常为trunk创建了一个分支(我们将其称为 copy 分支),但情况并非总是如此)。
  • 您可以根据开发技术在原始副本分支上完成工作。
  • 如果要进行合并,请签出要合并的分支的副本。毕竟,这是获得变化的分支。您希望在将这些更改提交回存储库之前测试这些合并的更改。
  • 要进行合并,您所要做的就是在工作副本上使用svn merge命令。如果您要从原始分支合并到 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 :(得分:1)

使用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]。如果这样做,只有在第一次重新整合后在您的分支上进行的更改才会合并到主干。

答案 2 :(得分:0)

您可以随时从分支机构合并到主干,如果仍需要它,则无需删除它。然而,我会从主干到你的分支合并,以便你跟上主线的发展。同样这样做可以让你使用SVN的重新集成分支功能,这可以使你的branc更改为trunk更容易。