Eclipse Merge Branch进入Trunk

时间:2010-01-19 11:21:16

标签: eclipse svn subversive

我正在尝试将我的开发分支合并到我的repo的主干中。我采取的步骤:

  1. 切换到主干
  2. 检查它是否是最新的,解决任何冲突
  3. 转到Team-> Merge
  4. 选择网址:开发分支
  5. 开始修订:创建分支时的修订
  6. 最终修订:HEAD
  7. 这应该是魔术 - 它打开同步视图,这很好,向我展示所有冲突,但问题发生了:

    在比较编辑器中,我看到两个文件: 本地文件|远程文件(306)

    这很奇怪,远程文件的修订号实际上是工作副本(trunk)中的文件之一,内容也是如此。本地文件具有分支中文件的内容。

    现在箭头显示我正在从左到右合并(从分支到主干)。当我点击确定时也会发生这种情况。

    但我只能从右向左移动!这不是我想要的 - 我不想用树干的旧内容覆盖分支中的更改。我想将内容从左(分支)移动到右(主干)。但我甚至无法写入正确的文件。

    我不知道它为什么写远程文件?它清楚地显示了远程文件窗口中的工作副本文件,并且分支中的文件(用于合并)显示在本地文件中。

    Subversive中的一些错误?

    THX, 马丁

3 个答案:

答案 0 :(得分:6)

对于颠覆性来说,合并从来就不容易(如旧SO question中所述),因此可能在外部(或使用subclipse)进行合并会更容易。

如果您的客户端和存储库至少都在SVN1.5中,则颠覆性新合并功能会更好,但仍然很危险,如this thread所示。

  

由于Subversive已针对SVN 1.5进行了修改,因此整个合并行为已发生变化。我真正喜欢的一件事是能够选择我想要的更改,将其应用到我的工作副本然后提交到主干   颠覆现在不再这样做,但强制所有更改到你的工作副本,然后你选择放在行李箱里的东西。

     

这不仅是不受欢迎的行为,而且也是危险的(如果你忽略了恢复的可能性)。我更喜欢做我认识的工作。我们有一个发布分支,它可以获得可能需要或可能不需要迁移到主干的更改。

答案 1 :(得分:2)

这一开始看起来很神秘,现在我将为每个人提供更好的答案。这涉及使用Eclipse的SVN Subversive客户端进行合并:

您正在进行正确的合并,从Trunk开始,然后指向您本地分支下的文件。您的文件在Team Synchronizing选项卡下的“Text Compare”窗口中打开。如果您在左侧导航栏中没有看到冲突,那么您的合并刚刚发生。是的,这是令人困惑和不直观的。

“文本比较”窗口为您提供的功能是,您可以在提交之前撤消更改(或任何其他可能无法识别合并文件的内容)。请记住,您正在从Branch中提取文件,因此想法是Branch文件在Trunk中,但在最终提交之前处于一种虚拟边界,并且在此处更改或撤消不需要的更改会引用Branch中的文件(显然)。这就是为什么你只有一个单向管道(Trunk to Branch)来覆盖那些通过你的工作副本合并到Trunk的更改。你的合并已经发生,但它还不是正式的。

如果看起来一切正常,请右键单击导航器窗口中的文件(Eclipse Helios安装中的左窗格),然后从下拉列表中选择“接受”。然后单击返回主代码查看选项卡(在我的安装中它是PHP,但它可能是您正在使用的任何内容),然后将文件提交到Trunk。

如果要对此进行测试,请在提交之前在“中继”中“按原样”查看文件,如果已正确完成合并,则应该看到更改反映在那里。这似乎是它在OSX Snow Leopard Macbook Pro上为我工作的方式。不确定Windows或Linux用户是否相同。我认为它基本上是相同/相似的过程。

答案 2 :(得分:0)

很容易

检查后备箱,检查为...给出一个不同的项目名称。

现在,您既可以在本地使用工作副本,也可以使用您要提交的主干以及您正在处理的分支以及您已对存储库进行的更改。 现在右键单击trunk项目(我的意思是项目,而不是单个文件) - merge - 选择分支项目(再次,PROJECT) 接受对本地副本的所有更改 按照惯例提交你需要的主干 一切正常,再次删除主干并继续在分支上工作

特别是对于分支来说,这看起来非常简单,对我来说就像一个魅力