如何在不破坏任何内容的情况下替换SVN存储库中的目录

时间:2011-04-14 14:20:46

标签: svn replace directory repository working-copy

我需要替换生产服务器上的SVN存储库中的目录,但是我不确定在不破坏任何内容的情况下执行此操作的正确方法。被替换的目录是已经完全重构的第三方模块修订版,因此为了彻底升级,我需要删除旧目录/文件并替换为新目录和文件。当我这样做时(使用svn delete),工作副本变得受阻或处于阻止我将新的,未版本化的目录提交或添加到工作副本的状态。我已经尝试过svn update,svn cleanup,以及其他UI(TortoiseSVN和Cornerstone)修复它的快捷方式,但似乎无法重新同步 - 这不会回滚到以前的版本或查看新副本。

我认为必须删除本地工作副本和远程repo上的目标目录,更新工作副本,将新目录添加到工作副本然后提交到repo;但我不确定我可能遗漏的具体细节或任何缺失的步骤或细微之处。我正在升级的模块对于站点应用程序非常重要,因此我需要在第一次才能正确实现 - 因为这是在生产服务器上进行的 - 并且必须快速完成。如果有人能够清楚地说明这些步骤,我会非常感激。

3 个答案:

答案 0 :(得分:10)

为了简化这一过程,您可以创建一个不存在目录的单个“损坏”修订版本。

  1. svn up让您的工作副本保持最新状态
  2. svn delete <directory>摆脱当前目录
  3. svn commit -m 'Deleted old module'
  4. 将新目录复制到工作副本
  5. svn add <directory>添加新目录结构
  6. svn commit -m 'Added new module'

  7. This question详细介绍了如何使用“供应商分支机构”,这可能会为您的情况提供更好的解决方案。

答案 1 :(得分:2)

使用TortoiseSVN的RepoBrowser可以直截了当地做到这一点。只需删除旧文件夹,然后将新文件夹拖放到。

答案 2 :(得分:1)

如果您确实需要在一次提交中更新目录结构,可以使用WinMerge:

  1. 使用SVN过滤器递归比较两棵树,以避免比较.sn目录
  2. 从WC
  3. 中删除新结构中不存在的文件和目录
  4. 将仅存在于新结构中的文件和目录添加到WC
  5. 将两个结构中存在的所有文件替换为WC中的新文件
  6. 提交