在SVN中移动文件夹,有点麻烦

时间:2009-06-15 02:33:13

标签: version-control tortoisesvn

我有一个关于codeplex的项目,我正在尝试重新组织树结构,因此它更有意义,更容易使用。

这是我目前的布局:

TopLevel
|-->src
   |--->ProjectA //This is where all the files are held
         |-->Core //plus three more folders 
|-->MyProject.Core
   |--->trunk
        |-->src // I want to move all the folders and files in ProjectA into here

所以我想将ProjectA下的所有文件夹和文件移动到ProjectA.Core / Trunk / src。

我签出整个源代码树并右键单击拖动ProjectA文件夹下的文件夹并选择“将版本化文件移到此处”到src文件夹中,该文件夹标记了Project中的文件夹以进行删除,但src中的新文件仍为绿色勾选它们而不是蓝色加号按钮。

在我提交更改后,我查看了repo浏览器,发现文件夹没有被移动,仍然在ProjectA文件夹中。

如何在subversion中将文件夹和这些文件夹中的文件移动到其他文件夹?不会丢失版本历史。

我正在使用TortoiseSVN。

编辑:原来它一定是codeplex,我把我的项目移动到谷歌代码,一切正常。

3 个答案:

答案 0 :(得分:2)

当我建议导出和导入文件时,我不知道我在想什么。我想我已经离开了TortoiseSVN太久了。我记得tortoise svn实际上有a really easy method移动整个目录。这不仅仅是显而易见的......但是不清楚为什么你不能将结果正确地提交到存储库。据推测,您确实提交了所有这些文件夹的父级。

以下是摘要: 您必须选择要移动的文件夹和文件,然后执行此操作右键单击选择并使用右键将其拖动到新位置。您将获得一个上下文菜单,询问您是否要重新定位存储库中的文件。这保留了历史。现在,您的旧文件已标记为删除,新文件应标记为已添加。 (我发现状态图标不总是代表真实状态)。将此提交为一次提交。我喜欢在签出文件的根目录上挑剔并使用检查修改,然后在这样做之前准确选择我要提交的更改。

如果只是移动这样的文件夹,请打开一个窗口,该窗口是该文件夹的父文件夹,另一个窗口将是该文件夹的新父文件夹。右键单击并拖动所有动作。我无法相信需要这么多文字才能描述一个简单的鼠标操作。

答案 1 :(得分:2)

这种类型的重组很容易使用Subversion命令行客户端,这对您来说可能是一个可行的选择。这是执行它的命令(来自TopLevel目录):

svn mv src/ProjectA MyProject.Core/trunk/src/
svn ci -m "relocate ProjectA"

您还可以使用URL作为源和目标将两个命令合并为一个,有关详细信息,请参阅svn mv文档。

我还没有找到一种简单的方法来使用TortoiseSVN做这种事情,所以当我需要时我只需使用命令行客户端来完成它。

答案 2 :(得分:0)

处理令人讨厌的移动的标准策略是,在最坏的情况下,创建所有新目录,仅将文件从旧目录移动到新目录,然后删除所有旧目录。这应该可以解决您遇到的几乎任何问题,并且您可以使用快捷方式(移动整个目录和/或树)来实现这一点。

这将保留所有文件的历史记录。它不会保留目录创建的历史记录,但通常这是您可以使用的内容,因为您确实拥有所有文件移动的历史记录,包括旧的和新的目录名称。