SVN本地工作副本具有已在服务器上删除的文件

时间:2012-07-29 21:55:30

标签: svn tortoisesvn

我有一个我正在研究的项目,我正在使用TortoiseSVN进行版本控制(最新版)。我是唯一曾参与该项目的人。

前段时间我在该项目中移动了文件夹和文件夹。版本历史记录告诉我,单个提交负责移动和删除某些文件。像这样:

PATH                  ACTION       COPY FROM FOLDER
===================================================== 
/some/folder          REPLACING    /some/other/folder
/some/folder/file1    DELETED
/some/folder/file2    DELETED

现在这是我的错误。我从来没有打算删除这两个文件。它只是一个复制操作。但不用担心,对吧?毕竟它是一个源代码控制。

然而现在那里有些奇怪。当我查看/some/folder时,我发现file1file2仍在那里。不仅如此,它们仍然被标记为受版本控制。 Tortoise完全相信它们是我当地工作副本的一部分。在我在工作副本上执行“清理”之前,尝试查看文件的历史记录也会出现错误的URL错误。

现在我可以看到文件的历史记录,但最后一次提交仍然表明它们已被删除,而在另一台计算机上执行更新并不会将文件放在那里。此外,无法提交对这些文件的更改。

WTF? O_O

更新:我想知道的是这是怎样以及为什么会这样。这可能是我自己的错,因为我做了很多文件重命名,包括删除文件夹和在其位置复制另一个文件夹之类的东西,都在同一个提交中。但它仍然不应该造成这样的混乱。那么...... WAT?

至于修理它,我想我可以自己做。我可以下载另一个工作副本,并通过故事结尾添加文件。但在这种情况下,我想了解导致它的原因,如何重现它,以及我是否应该向SVN团队提交错误。 :P

1 个答案:

答案 0 :(得分:2)

为什么会这样?这是一个难以回答的问题。但是,我知道这种类型的东西在TortoiseSVN中发生了很多。这不是程序的问题,但通常是由于人为错误。

TortoiseSVN使用Windows资源管理器的界面,这可能是个问题。在资源管理器中,我只需按一下按钮即可重命名,拖放,删除文件。不幸的是,我倾向于使用Explorer做的任何事情都不适用于Subversion。

使用TortoiseSVN,如果我要移动工作目录中的文件,我必须使用TortoiseSVN上下文菜单。如果我想重命名文件,我必须转到TortoiseSVN上下文菜单。这与我通常与资源管理器交互的方式有所不同,而且很容易忘记。

您必须记住的一件事是,工作副本本身可能并非全部在同一版本上。不同的文件夹,甚至不同的文件可以在不同的版本。如果碰巧您正在查看的文件夹的版本早于存储库中的文件夹,则可以轻松查看存储库中不再存在的文件。

事实上,这是我与TortoiseSVN的另一个问题。 TortoiseSVN并没有真正将这类信息转发给你。

顺便说一下,我在Windows上使用TortoiseSVN。但是,我必须让自己意识到我在使用它时提到的问题,否则我发现我的存储库和我的工作目录没有完全达成一致。

我大量使用TortoiseSVN附带的命令行客户端。我发现命令行客户端可以提供更多信息,更容易让事情恢复同步。我建议使用TortoiseSVN的任何人学习命令行客户端,并在TortoiseSVN可能导致你误入歧途的情况下使用它。我提交的90%是通过命令行客户端完成的,我使用命令行客户端执行了很多svn status命令。我发现它可以控制TortoiseSVN。


还有一件事:不要复制文件并将其重新添加。对于Subversion,这些是全新的文件,没有与之相关的历史记录。对你来说,有一个前一个文件的延续。几个星期后,当你突然发现合并时出现不太正确的事情时,会发生欢闹。

而是将文件从旧版本复制到当前工作目录:

$ svn cp -r30 ^/trunk/my_file@30 .

这会将修订版30(假设这是删除之前该文件的最后修订版)链接到当前工作副本。历史记录是正确的,您和Subversion都会同意该文件的状态。