我非常习惯如何在 Eclipse 中进行 CVS 合并,而且我对 Subclipse 和 Subversive 与 SVN 存储库一起工作的方式感到满意,但我不太确定如何正确进行合并。

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

这个问题并不是 Subclipse 或 Subversive 特有的。

谢谢您的帮助!

有帮助吗?

解决方案

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

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

KDiff3 是可移植的,TortoiseSVN 是 Windows shell 扩展,因此如果您使用其他环境,我会尝试仅使用 SVN 进行合并。但这会更痛苦:)

其他提示

将整个分支合并到主干中

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

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

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

  4. 默认视图是1个url合并

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

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

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

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

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

  4. 默认视图是1个url合并

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

解决冲突

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

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

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

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

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

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

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

如果您做对了,那么就完全取决于您如何使用比较编辑器进行正确的更改。

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

其次,您可能希望了解某些版本的 Eclipse subversive 插件中的一个错误,该错误会导致所有接受合并更改的文件被错误地标记为存在冲突。这个错误已经被修复了,但是很多人似乎还没有更新来修复这个问题。更多详细信息请参见此处:

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

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

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

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

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

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

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

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

转到Windows->首选项→团队 - > SVN-> diff Viewer添加一个新的配置(添加按钮):扩展名或 mime 类型:* - 如果您希望可以为不同的编辑器指定不同的 mimetypes,我不需要这样,因此 alquantor。

差异:程序路径 C:\Program Files\KDiff3\kdiff3.exe (或者任何你有合并编辑器的地方 - 请注意 Windows 路径,请随意在评论中添加 Linux 版本或编辑此答案。)

论据:${基地} ${我的} ${他们的}

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

论据:${base} ${我的} ${他们的} -o ${合并}

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

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

干杯

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top