【问题标题】:What is the proper way to do a Subversion merge in Eclipse?在 Eclipse 中进行 Subversion 合并的正确方法是什么?
【发布时间】:2017-11-07 20:37:20
【问题描述】:

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

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

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

感谢您的帮助!

【问题讨论】:

    标签: eclipse svn merge subversive


    【解决方案1】:

    将整个分支合并到主干

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

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

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

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

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

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

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

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

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

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

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

    解决冲突

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

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

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

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

    【讨论】:

    • 对此有 40 票赞成,而接受的答案有 2 票赞成,这与您的观点一致@HDave
    • 如果我想按照您在第二部分中的描述将分支重新合并到主干中,如果我总是选择“所有”修订而不是一一选择过去的修订,我会得到相同的结果吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      使用 Eclipse 集成,效果很好。

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

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

      【讨论】:

      • 值得指出的是,为了使合并历史能够正常工作,客户端、服务器和存储库都需要至少升级到 1.5:见subversion.tigris.org/…
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

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

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

              【讨论】:

              • 我会说它被否决只是因为这个问题是关于如何在 Eclipse 中做到这一点的具体问题。
              • 有时答案必须开箱即用。
              • 特别是如果它基本上为有关多平台 IDE 的问题提出了一种有效的单平台替代方案。
              【解决方案9】:

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

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

              差异: 程序路径 C:\

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

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

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

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

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

              干杯

              【讨论】:

                猜你喜欢
                • 2021-10-02
                • 1970-01-01
                • 2013-10-03
                • 1970-01-01
                • 2014-05-16
                • 1970-01-01
                • 2015-03-15
                • 2011-07-29
                相关资源
                最近更新 更多