颠覆性:svn:E195016:无法合并到带有切换子树的工作副本

时间:2016-12-13 17:36:45

标签: svn merge subversive svnkit svn-merge

Eclipse和Subversive存在问题。

我正在尝试将项目的一个分支重新集成到主干中。

这些是我正在遵循的操作:

  1. 切换到项目的主干版本
  2. 我确保没有任何待处理操作,执行还原和更新,以便从“干净”工作副本开始,与主干的远程副本完美同步
  3. 我去“团队 - >合并......”
  4. 我进入“Reintegrate”选项卡,然后选择我要在主干中合并的分支,指向分支的“Head revision”。
  5. 我按下确定按钮,但这是我获得的错误:
  6.  Merge operation failed.
    Can't overwrite cause with org.tmatesoft.svn.core.SVNException: svn: E195016:
    Cannot merge into a working copy with a switched subtree
    

    我不明白什么是错的。

    我正在使用这个Eclipse和SVN配置:

    Eclipse Java EE IDE for Web Developers.
    Version: Neon.1 Release (4.6.1)
    Build id: 20160913-0900
    
    Subversive SVN Team Provider    4.0.3.I20161129-1700    
    
    SVNKit 1.8.14 Implementation (Optional) 6.0.3.I20161124-1700
    
    SVN 1.9
    

    提前致谢。

3 个答案:

答案 0 :(得分:2)

我不确切知道为什么会出现这个问题,但我注意到如果我们在合并操作之前在分支之间执行一些“切换”操作,就会发生这种情况。

由于某些原因,在这种情况下,可以避免执行合并操作。

我找到的“解决方法”是在SVN签出中继后,在干线的干净副本上执行合并操作,而不进行任何切换操作。

通过这种方式,错误不再发生。

这不是一个实用的解决方案,但它确实有效。

答案 1 :(得分:1)

默认情况下,

Reintegration merges in SVN 1.8 and newer are done automatically。如果您的工作副本是混合版本或已切换路径,则无法执行自动重新集成合并。

然而,SVNKit可能与实际的Apache Subversion不同。

了解SVNBook中的自动合并:

  

您的中继工作副本无法进行任何本地修改,切换路径,   或包含修订的混合物(参见章节   “混合修订工作副本”)。虽然这些通常是最好的   无论如何合并的做法,它们都是自动化的   重新融合。

答案 2 :(得分:1)

我想我已经找到了两种方法进入 E195016:无法合并到具有切换子树状态的工作副本。

1)从主干切换到分支(带编辑和提交),然后切换到另一个分支(带编辑和提交),然后切换到主干并尝试重新集成其中一个分支。

提示:切勿在分支之间切换,始终切换回分支之间的主干。

2)在行李箱中意外编辑,然后意识到你的错误。还原主干,创建分支(带开关,编辑和提交),切换回主干,然后尝试重新集成分支。

提示:永远不要恢复行李箱。请改为使用(右键单击)上下文菜单中的替换为存储库中的最新内容

我只找到了一种可靠地从这种状态恢复的方法。

  1. 备份工作区。
  2. 从原始工作区中删除项目,选择删除磁盘上的项目内容(无法撤消)
  3. 创建一个新项目来替换它。
  4. 如果您成功恢复,则不会使用备份,如果您犯了一个灾难性的错误,它只是一个安全网。

    在我的情况下,替换项目意味着从SVN创建一个新的项目并使用该选项使用新的项目向导(在我的案例中为PyDev Project)完成项目。在您的情况下,您需要开发自己的恢复方法。别忘了写下来。

    当然,您可以选择启动全新的工作区。如果您选择此方法,请不要忘记导出首选项和启动器(至少),以便将它们导入新工作区。这样你仍然可以使用熟悉的配置。