【问题标题】:SVN Merge of Moved Source Code FilesSVN 合并移动的源代码文件
【发布时间】:2012-09-01 15:08:15
【问题描述】:

我觉得我拥有世界上最简单的 SVN 用例:

  • 我有一个文件,Test.java 在 SVN 的 trunk 中。
  • 我将trunk 分支到dev-branch
  • 我将Test.java 移动到trunk 中的com/mycompany 文件夹中。
  • 我把Test.java改成dev-branch
  • 我将dev-branch 合并到trunk
  • 树冲突结果。

为什么,哦,为什么,SVN 不能处理这个?我们做错了什么吗?这感觉应该很容易,但我公司的每个工程师都受到了阻碍。

在这里寻找面向 SVN 的答案(不是“移至 git”等)。

【问题讨论】:

  • 在合并之前尝试在 dev-branch 上进行 SVN 更新。
  • 我正在使用以下符号将 dev 分支合并到主干中:svn merge url-of-dev-branch -r rev1:rev2。
  • 尝试进行 SVN 更新,然后使用更高的修订号作为 rev1。
  • 为什么会有帮助?我正在将分支合并到主干中。 Branch 是一个远程 URL,因此根据定义它应该是最新的。我唯一的本地文件夹是trunk,在执行合并之前我确保它是最新的。
  • 我认为@GilbertLeBlanc 的意思是先将主干合并到分支,这听起来完全是同一个问题——正好相反。

标签: svn merge


【解决方案1】:

在 SVN 中,移动是删除和添加。当您在分支中合并时,它会执行您移动的添加部分,但由于冲突它无法执行删除。您现在必须手动解决冲突

  1. 将您的Test.java 复制到com/mycompany/Test.java,覆盖旧的。这解决了与该文件的冲突。
  2. 从旧位置删除Test.java 文件。这是执行合并时 SVN 无法执行的更改集的删除部分的手动方法。使用svn delete Test.java 命令。
  3. 告诉SVN冲突已经解决,你的工作目录是正确的svn resolve --accept working .最后的点是当前目录
  4. 告诉SVNTest.java文件的冲突也用svn resolve --accept working Test.java解决了

然后您可以提交您的合并版本,您将重新与存储库同步。

【讨论】:

  • 一位工程师今天在我们的谈话中指出了这一点。这是不幸的。当然,这个问题并不棘手。 svn 中是否有计划支持真正的 svn move,其实现是删除然后添加?
  • 没希望了。来自 svn 文档:'一个共同的愿望是重构源代码,尤其是在基于 Java 的软件项目中。文件和目录被打乱并重命名,通常会对从事该项目的每个人造成极大的干扰。听起来像是使用分支的完美案例,不是吗?只需创建一个分支,将事物打乱,然后将分支合并回主干,对吗?唉,这种情况现在效果不太好,被认为是 Subversion 当前的弱点之一。'
  • 实际上mvcprm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多