17

我很习惯如何在 Eclipse 中进行 CVS 合并,另外我对 Subclipse 和 Subversive 与 SVN 存储库一起工作的方式很满意,但我不太确定如何正确地进行合并。

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

这个问题并不特定于 Subclipse 或 Subversive。

谢谢您的帮助!

4

9 回答 9

72

将整个分支合并到主干

  1. 检查分支项目历史以确定分支的版本

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

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

  4. 默认视图是 1 url 合并

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

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

  1. 检查主干项目历史以确定您上次合并到主干的时间(您应该对此发表评论)

    • 为了争论,假设这个版本是 82517
  2. 所以现在我知道分支中任何大于82517的版本都需要合并到trunk

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

  4. 默认视图是 1 url 合并

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

解决冲突

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

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

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

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

于 2010-02-05T22:06:54.280 回答
4

我通常检查两个分支,然后使用相互比较选项对两个源树进行类似同步的比较。将更改集成到一个分支后,您可以重新提交回存储库。

于 2008-09-19T01:03:17.723 回答
4

使用 Eclipse 集成,它工作得非常好。

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

如果您做对了,那么您只能使用比较编辑器进行正确的更改。

于 2008-09-19T01:29:27.067 回答
4

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

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

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

于 2011-02-25T07:53:35.403 回答
3

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

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

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

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

于 2008-09-23T15:17:01.043 回答
3

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

于 2010-05-02T01:55:39.790 回答
2

在 Eclipse 中同步视图缺少的一件事是签入功能。在团队同步视图中,我可以查看我的所有更改并解决冲突,因此直接在此处签入而不是返回 Java 视图并进行签入会相当直观。

于 2010-06-03T01:17:07.823 回答
1

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

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

KDiff3 是可移植的,TortoiseSVN 是一个 windows shell 扩展,所以如果你使用其他环境,我会尝试只使用 SVN 来合并。但这会更痛苦:)

于 2008-09-19T01:17:04.023 回答
0

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

转到 Windows -> Preferences → Team -> SVN -> Diff Viewer 添加新配置(添加按钮):扩展名或 mimetype:* - 如果您希望可以为不同的编辑器指定不同的 mimetype,我不需要,因此阿尔昆特。

Diff:程序路径 C:\Program Files\KDiff3\kdiff3.exe (或任何你有合并编辑器的地方 - 对于 windows 路径,请随时在评论中添加 linux 版本或编辑此答案。)

参数:${base} ${mine} ${theirs}

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

参数:${base} ${mine} ${theirs} -o ${merged}

这可能也适用于其他合并编辑器,但使用不同的参数语法(弄清楚并让我们知道:))。

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

干杯

于 2017-11-07T12:37:20.470 回答