合并主干到分支

时间:2010-02-24 19:44:06

标签: svn tortoisesvn

这是第一次尝试将最新的主干头合并到我的分支机构。我只想将我团队中其他开发人员的最新更新发送到我的分支机构。我正在使用Subversion 1.6.7。因此,在Merge对话框中,我选择了“Merge 2 different trees”选项。

我的问题是:

我的分支机构的最新版本是358,主线干线是357.所以当我进行测试合并时,它会删除358(我的分支)中的任何新内容。因为我的分支有更高的版本号,我应该从我的主干到分支而不是从分支到主干吗?我知道在各种博客的例子中,他们说要从分支到主干,但在我的情况下,分支的版本号更高。

alt text http://elbalazo.net/post/repobrowser.jpg

alt text http://elbalazo.net/post/merge.jpg

现在在测试合并期间,我不明白为什么它会删除我的主干中不存在的那些文件(我在开发过程中添加了新文件):

alt text http://elbalazo.net/post/mergeoptions.jpg

alt text http://elbalazo.net/post/revisiongraph.jpg

alt text http://elbalazo.net/post/deleted.jpg

现在让我们反过来......这就是我认为它应该去的方式(因为那时我将从较低的修订版(357)转到更高版本(358)。所以这里它将从主线干线到我的分支:

alt text http://www.elbalazo.net/post/mergdialog_trunk_to_branch.jpg alt text http://www.elbalazo.net/post/testmerge_trunk_to_branch.jpg 更新后的评论:

好的,所以当我尝试trunk-to-trunk时,这就是我得到的:

alt text http://www.elbalazo.net/post/merge_trunk_to_trunk.jpg

alt text http://elbalazo.net/post/testmerge_trunk_to_trunk.jpg

4 个答案:

答案 0 :(得分:6)

乌龟合并非常好,但你必须知道它的诀窍。

合并时,首先使用顶部单选按钮选项(合并一系列修订版)并始终合并到目标位置。因此,右键单击目标工作副本,选择合并,然后在合并对话框中编辑URL,以便From:字段包含要从中更改的分支。

当你第一次看到它时有点倒退,但是一旦你理解了正在发生的事情,它实际上更有意义 - 你在合并对话框中对URL进行了所有更改,并将它们应用到你的工作副本。这是理解的诀窍 - 你没有合并文件(就像你手动一样),但你正在重新应用对源分支所做的更改。

使用“显示日志”按钮选择所需的修订。如果有mergeinfo(即先前合并的修订版),它们将显示为灰色。

所有这一切的另一部分是SVN在处理树冲突方面不太好 - 如果您添加或删除了目录,SVN会询问您的意图(即树冲突)。您所要做的就是解析目录并选择实际删除或添加的目录。这样做是因为它无法确定文件是被删除(或添加)还是仅重命名。

我现在一直在合并 - 这很容易 - 但我不认为我在第一个对话框中曾经使用过其他两个合并选项。始终从URL合并到您的工作副本;合并完成后,您可以查看结果并在您满意后提交。

答案 1 :(得分:2)

我认为您没有选择要合并的正确网址。您应该右键单击要合并的分支,选择合并,然后在要合并的“主干”分支中选择两个修订。

答案 2 :(得分:2)

  

我应该从我的行李箱到   分支而不是从分支到主干   在这种情况下,因为我的分支有一个   更高版本号?

修订号不应确定您是从分支到分支还是从分支到分支。重要的是:你想合并什么?是否要将分支中创建的更改移回到主干,或者是否要将更改从主干移动到分支?

如果你想将更改从分支移动到主干(通常是你想要的,如果你使用分支“它们的目的”),那么从分支r345 - 358合并到主干。否则,反过来做。

编辑:您在上面的屏幕截图中所做的是将delta FROM rev 358转换为357并将其合并到您的工作副本中。由于您在commit 358和357 - 358< 0,delta将执行相反的操作,即删除文件。

答案 3 :(得分:0)

如果您的意图是将所有主干更改合并到您的分支中,那么您根本不需要指定修订范围(在步骤之后进行解释)

我相信这应该是你的工作流程:

  • 右键单击分支的干净(无修改)工作副本
  • 选择“合并一系列修订”并点击下一步
  • 填写“要合并的网址”,将网址绑定到“主干”,然后点击“下一步”(不填写修订版字段)
  • ...测试合并或进行合并。

由于您使用的是1.6版本(带有合并跟踪的Subversion版本),因此未指定修订版本范围将使用Subversion的合并跟踪,并将合并尚未标记为在分支中合并的任何修订。

如果这是您第一次将任何内容从trunk合并到分支,这意味着在您创建分支之后通过HEAD版本的trunk修改后的任何内容都将合并到您的分支工作区,然后当你提交时,将记录合并。如果您决定在一周之后再次同步您的分支,则使用相同的步骤,它将仅合并之前未合并的主干中的任何修订。