在 SVN 中移动文件夹

Kev*_*Kev 6 svn tortoisesvn

这是在 Win2k3sp2 上,使用 TortoiseSVN 1.6.5 和 SlikSVN 1.6.3。

我在一个 repo 中有一个文件夹,称之为 /a/b,我想在同一个 repo 中成为 /a/c/d。我试过只是移动文件夹并重命名它,然后提交,显然它会感到困惑,因为 .svn 文件夹认为它仍然在旧名称下,如果它确实有效,它是一个两次提交的事情 /a/ b 被删除,/a/c/d 是全新的,这是不好的,因为那样我就会丢失每个文件所附的历史记录。

我开始四处寻找并找到“relocate”,它带有一个巨大的警告并说服我不要使用它。然后是“切换”,虽然我认为“重新定位”是描述我想做的事情的更直观的方式,但似乎是合适的选择。所以我这样做了,虽然 /a/b 中只有几个文件(比如可能有 8 个文件夹,每个文件夹包含一两个文件),但花了很长时间,现在:

  1. /a/b 还在
  2. /a/b 中的一半文件夹不见了
  3. 当我尝试查看 /a/b 中的其余文件夹时,它们给了我一个错误:“/a/b/e 不可访问。访问被拒绝。”
  4. /a/c/b(不是我所说的 /a/c/d!)已创建但保持为空
  5. 我尝试了更新,现在有些文件夹又回到了 /a/b,但不是全部

我的问题分为两部分:

  1. 我该如何清理?
  2. 我所描述的移动文件夹的正确方法是什么?

小智 6

您的问题是使用了错误的命令;“切换”完全符合您的要求——它改变了您的工作副本“指向”的存储库位置,而无需更改存储库。(切换然后提交会产生一些结果,但以一种真正破碎的方式,这不是你的意思。你是对的;听起来很诱人的“重定位”是“切换”的一个特例,应该避免同样的原因。)
然后“更新”命令更新了工作副本以匹配当前在“新”位置的存储库中的内容 - 什么都没有!

Subversion 还没有真正的移动/重命名。颠覆安全的方法是复制然后删除。TortoiseSVN 包括一个方便的“移动”选项,它将复制和删除作为一个操作。

做你想做的最简单的方法:
1. 在 TortoiseSVN 中打开 repo-browser。
2.右键单击文件夹并将其从旧位置拖动到新位置。
3. 从上下文菜单中选择“移动”。

这也适用于您的工作副本,并且是在不丢失历史记录的情况下移动或重命名 wc 中的文件和文件夹的安全 Tortoise/Subversion 方式。