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

如何在不破坏任何内容的情况下替换SVN存储库中的目录,svn,replace,directory,repository,working-copy,Svn,Replace,Directory,Repository,Working Copy,我需要在生产服务器上替换我的SVN存储库中的一个目录,但不确定在不破坏任何内容的情况下如何正确地执行此操作。被替换的目录是一个第三方模块修订版,已完全重新构造,因此为了干净地升级,我需要删除旧目录/文件,并替换为新目录和文件。当我执行此操作(使用svn delete)时,工作副本将被阻止或处于阻止我向工作副本提交或添加新的未版本目录的状态。我尝试过svn更新、svn清理,以及其他UI(TortoiseSVN和基石)修复它的快捷方式,但似乎无法让事情重新同步-这是没有回滚到以前的修订版或签出新的副

我需要在生产服务器上替换我的SVN存储库中的一个目录,但不确定在不破坏任何内容的情况下如何正确地执行此操作。被替换的目录是一个第三方模块修订版,已完全重新构造,因此为了干净地升级,我需要删除旧目录/文件,并替换为新目录和文件。当我执行此操作(使用svn delete)时,工作副本将被阻止或处于阻止我向工作副本提交或添加新的未版本目录的状态。我尝试过svn更新、svn清理,以及其他UI(TortoiseSVN和基石)修复它的快捷方式,但似乎无法让事情重新同步-这是没有回滚到以前的修订版或签出新的副本


我认为必须删除本地工作副本和远程回购上的目标目录,更新工作副本,将新目录添加到工作副本,然后提交给回购;但我不确定我可能遗漏的细节或任何遗漏的步骤或微妙之处。我正在升级的模块对于站点应用程序来说非常重要,因此我需要在第一次就做好这一点,因为这是在生产服务器上完成的,而且必须快速完成。如果有人能清楚地标出步骤,我会非常感激。

为了让这更容易,你可以在目录不存在的地方创建一个“坏”版本

  • svn up
    以获取最新的工作副本
  • svn delete
    删除当前目录
  • svn提交-m“已删除的旧模块”
  • 将新目录中的副本复制到工作副本
  • svn add
    添加新目录结构
  • svn提交-m'添加了新模块'


  • 提供了有关如何使用“供应商分支”的详细信息,对于您的情况,这可能是一个更好的解决方案。

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

  • 递归比较这两个树,使用SVN筛选器避免比较.SVN目录
  • 从WC中删除新结构中不存在的文件和目录
  • 将仅存在于新结构中的文件和目录添加到WC
  • 用WC中的新文件替换两个结构中存在的所有文件
  • 承诺

  • 使用OrtoiseSVN的浏览器直接实现这一点。只需删除旧文件夹,然后拖放新文件夹。

    谢谢您的建议,这非常有用。事实上,我最终得到了一个修改后的工作流程,在这个流程中,我必须使用TortoiseSVN从远程桌面连接到Win2K3服务器来执行对生产的提交。TortoiseSVN有自己的SVN捆绑版本,它有自己奇怪的命令行实现和自动脚本的语法。由于只使用上下文菜单命令,我发现通过以下方式更容易本地化更新:1。cd 2。删除根目标目录3的内容。svn提交4。复制新模块文件/dirs 5。svn添加6。svn承诺成功!我看不出为什么这应该在2次提交中完成。您可以在工作副本中执行此操作,并将其作为单个操作提交。SVN将始终将其视为“删除”s+“添加”s,但除了同名文件外,它会将其视为“替换”。您的方法就是我过去进行此类滚动更新的方式,但是对于完全不同的模块结构,我更喜欢通过delete->replace->commit从一个全新的副本开始,而不是有选择地删除升级路径中的文件和目录@西蒙的推荐,加上我对乌龟的补充,在这个职位上表现得非常出色。