修复Subversion Ancestry

时间:2014-07-07 14:31:14

标签: svn

我有一系列项目,这些项目都来自一个共同的框架。这个框架提供了一些相对静态的文件(所有项目都相同),每个用户必须修改部分文件(类似于项目),以及用户必须提供的一些文件(在项目中存在但不相关)。 / p>

通过提交历史,我看到对这些常见文件的提交已经以一种交叉方式完成。例如,在一次提交中,我看到同一文件在所有项目中以相同的方式更新。没有原始分支在这些文件之间建立祖先关系,而原始开发人员只是单独签入原始文件和所有后续更改。

在Subversion中有没有正确的方法来解决这个问题?有什么方法可以让我现在建立新的血统吗?我真的不关心纠正已经完成的所有错误,我只需要一种方法来强制存储库正确处理合并。

2 个答案:

答案 0 :(得分:2)

似乎没有优雅的方法可以从中恢复。基本的限制是SVN显然无法管理多个祖先。它假定文件只有一个父文件。因此,您无法获取现有文件并合并到不相关的分支中,期望将来从该无关分支合并以完全合并。

最后我的决议是:

  1. 查看相关项目的两个副本,一份工作副本和一份备份。
  2. 删除原本应该从公共框架分支的所有文件。将这些删除保留在工作副本中(即尚未提交)
  3. SVN将通用框架的文件复制到您的工作副本中。这些文件应与先前删除的文件具有相同的名称,并且其SVN状态现在应显示为“已替换”或“R”。您应该从原始项目应该分支的框架文件的任何版本执行此复制。
  4. 将备份中的文件复制(仅限常规文件系统副本)在工作副本的顶部。这将恢复文件的内容,以便唯一的实际更改是祖先。
  5. 运行差异以确保您不会忽视某些内容
  6. 提交。
  7. 此时您拥有内容相同的文件,但他们的祖先表明它们来自框架文件。如果您有该框架的新版本,您现在应该可以轻松地从框架合并到您的项目中。

答案 1 :(得分:0)

你可以将类分解为它自己的subversion存储库。

  1. 创建新的SVN回购。
  2. 确定复制类的最佳版本。
  3. 将这些组件添加到新存储库。
  4. 添加一个pom.xml文件以构建一组常见组件。
  5. 提交所有内容,然后查看“构建服务器”
  6. 构建通用组件的发行版。
  7. 逐个浏览存储库,删除有问题的类,并重新构建构建以使用公共组件。
  8. 为了获得最佳效果,请不要让项目依赖于“SNAPSHOT”版本,拥有真正的发布版本,并在需要最新版本时提升项目。

    存在其他解决方案;但是,它们往往是临时解决方案。例如,Speed8ump提供的“如何在项目之间同步文件”计划确实有效(并且运行良好),直到某人再次修改其中一个副本而不将其更改分发到所有其他重复项。