在Eclipse中进行Subversion合并的正确方法是什么?

时间:2008-09-19 00:57:49

标签: eclipse svn merge subversive

我已经习惯了如何在Eclipse中进行CVS合并,而且我对Subclipse和Subversive使用SVN存储库的方式感到满意,但我不太清楚如何正确地进行合并。

当我进行合并时,它似乎想要将合并的文件粘贴在我的项目中的单独目录中,而不是覆盖合并中要替换的旧文件,就像我在CVS中习惯的那样。

这个问题并不特别针对Subclipse或Subversive。

感谢您的帮助!

9 个答案:

答案 0 :(得分:72)

将整个分支合并到主干

  1. 检查分支项目历史记录以确定从中获取分支的版本

    • 默认情况下,Eclipse团队“历史记录”仅显示过去的25个修订版,因此您必须单击该视图中标记为“全部显示”的按钮
    • 当您说“全部显示”时,它会将您带回分支日期并向您显示主干的所有历史记录,因此您必须在分支的位置搜索您的评论
    • 注意:如果您使用Tortise SVN执行相同任务(导航到分支并选择“显示日志”),它将仅显示分支历史记录,以便您可以准确分辨分支的开始位置
  2. 所以现在我知道82517是分支历史的第一个版本ID。因此,82517之后的所有分支版本都有我要合并到主干

  3. 的更改
  4. 现在转到Eclipse工作区中的“trunk”项目并选择“右键单击 - 团队 - 合并”

  5. 默认视图是1个网址合并

    • 选择要合并的分支的网址
    • 在“修订”下选择“全部”
    • 按OK
  6. 这将带您进入“团队同步”视角(如果不是,您应该自己去那里)以解决冲突(见下文)

  7. 将更多分支更改重新合并到主干

    1. 检测主干项目历史记录以确定您上次合并到主干中的时间(您应该对此进行评论)

      • 为了论证,我们说这个版本是82517
    2. 所以现在我知道分支中任何大于82517的版本都需要合并到主干

    3. 现在转到Eclipse工作区中的“trunk”项目并选择“右键单击 - 团队 - 合并”

    4. 默认视图是1个网址合并

      • 选择要合并的分支的网址
      • 在“修订”下选择“修订”单选按钮,然后单击“浏览”
      • 这将打开最新的25个分支修订列表
      • 选择编号大于82517的所有修订
      • 按OK(您应该会在单选按钮旁边的输入字段中看到修订列表)
      • 按OK
    5. 这将带您进入“团队同步”视角(如果不是,您应该自己去那里)以解决冲突(见下文)

    6. 解决冲突

      1. 您应该处于“团队同步”视角。对于提交目的,这看起来像任何常规同步,您可以看到新文件和有冲突的文件。

      2. 对于您看到冲突的每个文件,选择“右键单击 - 编辑冲突”(不要双击该文件,它将调出提交差异版本工具,这是非常不同的)

        • 如果您看到“<<<<<<<< .working”或“>>>>>>> .merge-right.r84513”之类的内容你处于错误的编辑模式
      3. 解决该文件中的所有冲突后,告诉文件“标记为已合并”

      4. 一旦所有文件都没有冲突,您就可以同步Eclipse项目并将文件提交到SVN

答案 1 :(得分:4)

我通常会检查两个分支,然后使用compare to each选项进行两个源树的同步比较。将更改集成到一个分支后,您可以重新返回存储库。

答案 2 :(得分:4)

使用Eclipse集成,它完全正常。

CVS的主要变化是,您只合并分支中的增量,即从一个修订版更改为另一个修订版。 也就是说你必须以某种方式跟踪正确的起始修订版(除非你有svn 1.5合并历史记录)

如果你做对了,只有你才能通过比较编辑器得到正确的改变。

答案 3 :(得分:4)

首先,如果您看到“>>>>>”在Eclipse中查看文件时,这些文件可能意味着您没有使用正确的比较编辑器查看文件。尝试右键单击项目视图或同步视图中的文件,然后选择“编辑冲突”以打开比较编辑器,该编辑器将以图形方式而不是文本显示冲突区域。请注意,出现“编辑冲突”的比较编辑器与您在“同步”视图中双击某个文件时所获得的比较编辑器不同 - 双重比较编辑器显示当前文件与其存在方式之间的差异当您上次检出或更新它时,编辑冲突比较对话框显示两个更改源之间的差异(例如,您合并的更改与合并前工作区中存在的更改)。

其次,您可能希望了解某些版本的Eclipse颠覆插件中的错误,这会导致所有接受合并更改的文件被错误地标记为存在冲突。这个bug已经修复,但是很多人似乎还没有更新来修复。更多细节:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=312585

答案 4 :(得分:3)

请记住,使用svn将修改后的树恢复为干净状态相当容易。只需在合并目标分支上有一个干净的工作区,并运行merge命令从合并源分支导入修改,然后同步您的工作区,您将获得通常的eclipse比较窗口,显示所有合并修改的文件和冲突。

如果由于某种原因你无法解决冲突,你可以恢复项目并恢复到干净的状态,否则你就会进行合并,一旦完成,你就可以提交。请注意,您不必提交,一旦处理完冲突,您也可以返回到dev视图,验证代码编译,运行单元测试,然后再次同步并提交(一旦冲突在本地他们决定不回来了)

上次我看,当你使用subclipse merge命令时,它会覆盖合并文件(使用冲突标记来显示冲突区域)并将合并的原始左侧和右侧放在同一个地方。它不应该放在不同的目录中。

根据经验,最好在一次提交中提交所有合并修改,并且只在提交中进行合并修改,以便以后可以在需要时回滚合并。

答案 5 :(得分:3)

openCollabNet的subclipse合并工具非常简洁。有许多可用的合并类型,并且我无缝地执行合并。我推荐它。

答案 6 :(得分:2)

eclipse中的syncrhonize视图缺少的一件事是登记功能。在团队同步视图中,我可以查看所有更改并解决冲突,因此在那里签到而不是返回到Java视图并办理登机手续会非常直观。

答案 7 :(得分:1)

我建议不要尝试使用Eclipse的插件作为Subversion的主要访问权限。

如果你在Windows上开发,TortoiseSVN是我见过的最好的Subversion访问程序。浏览到您要合并的目录,右键单击它并使用Tortoise SVN合并选项。假设非交互式合并,一旦发生冲突,您将必须浏览每个冲突的文件并编辑冲突,然后再将其标记为已解决。对于这个过程,我推荐一个名为KDiff3的程序,它显示您的本地存储库副本(合并前存储在.svn中的内容),本地副本(包括任何更改)以及来自存储库的副本,并允许您很容易看到(甚至手动修改,如果需要)合并的结果。它还会自动处理一堆小错误。

KDiff3是可移植的,TortoiseSVN是一个Windows shell扩展,所以如果你正在使用另一个环境,我会尝试使用SVN进行合并。但这将更加痛苦:)

答案 8 :(得分:0)

我登陆这里因为我正在寻找一种在外部合并编辑器(KDIFF3)中合并的方法,但是从eclipse开始合并。我对上面提供的答案不满意。所以这里有一个配置kdiff3作为eclipse中SVN的合并和差异编辑器:

转到Windows - >首选项→团队 - > SVN - >差异查看器 添加新配置(添加按钮): 扩展名或mimetype:* - 如果你希望你能为不同的编辑指定不同的mimetypes,我不需要那样的alquantor。

<强> DIFF : 程序路径C:\ Program Files \ KDiff3 \ kdiff3.exe(或者你有合并编辑器的地方 - sry for windows路径,随意在评论中添加linux版本或编辑这个答案。)

参数: $ {base} $ {mine} $ {他们的}

<强>合并: 程序路径C:\ Program Files \ KDiff3 \ kdiff3.exe

参数: $ {base} $ {mine} $ {他们的} -o $ {merged}

这可能对其他合并编辑器也有效,但是使用不同的参数语法(想出来让我们知道:))。

用于合并和比较&gt; foo的差异视图的使用与往常一样(团队 - >编辑冲突)。

干杯