这是在 Win2k3sp2 上,使用 TortoiseSVN 1.6.5 和 SlikSVN 1.6.3。
我在存储库中有一个文件夹,名为 /a/b,我想在同一个存储库中将其改为 /a/c/d。我尝试过移动文件夹并重命名,然后提交,但显然它搞混了,因为 .svn 文件夹认为它仍使用旧名称,如果它确实有效,则需要两次提交,其中 /a/b 被删除,而 /a/c/d 是全新的,这不好,因为这样我会丢失每个文件附带的历史记录。
我开始四处寻找,发现了“relocate”,它带有一个巨大的警告,并说服我不要使用它。然后是“switch”,虽然我认为“relocate”是一种更直观的描述我想要做的事情的方式,但它似乎是合适的选择。所以我这样做了,花了很长时间,即使/a/b中只有几个文件(比如可能有8个文件夹,每个文件夹包含一个或两个文件),现在:
- /a/b 仍然存在
- /a/b 中的一半文件夹都消失了
- 当我尝试查看 /a/b 中的其余文件夹时,它给出了一个错误:“/a/b/e 无法访问。访问被拒绝。”
- /a/c/b(不是我所说的 /a/c/d!)已创建但保持为空
- 我尝试更新,现在一些文件夹回到了 /a/b,但不是全部
我的问题分为两部分:
- 我该如何清理它?
- 正如我所描述的,移动文件夹的正确方法是什么?
答案1
您的问题是使用了错误的命令;“Switch”完全符合您的要求 - 它更改了工作副本“指向”的存储库位置,但没有更改存储库。(Switch 然后提交会产生一些结果,但结果非常糟糕,这不是你的意思。你是对的;听起来很诱人的“重新定位”是“切换”的一个特例,出于同样的原因应该避免使用。)
然后,“更新”命令更新了工作副本以匹配“新”位置的当前存储库中的内容 - 什么都没有!
Subversion 尚未提供真正的移动/重命名功能。Subversion 的安全方法是复制然后删除。TortoiseSVN 包含一个方便的“移动”选项,可将复制和删除作为一个操作进行。
完成您想要的操作的最简单方法:
1. 在 TortoiseSVN 中打开 repo 浏览器。2
.正确的单击并将文件夹从旧位置拖到新位置。3
. 从上下文菜单中选择“移动”。
这也在您的工作副本中有效,并且是安全的 Tortoise/Subversion 方式,可以在 wc 中移动或重命名文件和文件夹而不会丢失历史记录。
答案2
回答你的第二点,下面是我使用 Tortoise-SVN 移动文件夹的方法:
- 在 Windows 资源管理器中右键单击文件夹,然后选择“Tortoise SVN”,再单击“Repo-browser”。
- 在 repo 浏览器中,查看您想要移动的文件夹所在的位置。
- 单击要移动的文件夹(或文件!)并将其拖到左侧窗格中您想要的位置
- 单击“确定”关闭 repo 浏览器
- 在您的文件夹中单击鼠标右键,然后选择“更新”。
当您更新时,Tortoise SVN 将删除原来的文件夹并在您移动它的位置重新创建它。
答案3
答案4
我遇到了类似的问题。但在我的例子中,目录 /a/b 和 /a/c 是分别检出的。
这采用稀疏(部分)检出的解决方案已经解决了该问题。