2

我有一个正在处理的项目,我正在使用 TortoiseSVN 进行版本控制(最新)。我是唯一一个参与过这个项目的人。

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

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

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

然而现在那里有奇怪的地方。当我查看 时/some/folder,我看到file1andfile2仍然存在。不仅如此,它们仍被标记为处于修订控制之下。Tortoise 完全相信它们是我本地工作副本的一部分。尝试查看文件的历史记录也给出了一个错误的 URL,直到我对工作副本执行“清理”。

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

怎么回事?o_o

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

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

4

1 回答 1

2

为什么会这样?这是一个很难回答的问题。但是,我知道 TortoiseSVN 经常发生这种类型的事情。这不是程序的问题,但通常是由于人为错误。

TortoiseSVN 使用 Windows Explorer 的界面,这可能是个问题。在资源管理器中,我习惯于通过按下按钮来重命名、拖放和删除文件。不幸的是,我倾向于用 Explorer 做的这些事情都不适用于 Subversion。

使用 TortoiseSVN,如果我想移动工作目录中的文件,我必须使用 TortoiseSVN 上下文菜单。如果我想重命名一个文件,我必须进入 TortoiseSVN 上下文菜单。这打破了我通常与 Explorer 交互的方式,而且很容易忘记。

您必须记住的一件事是,工作副本本身可能并不都在同一个修订版上。不同的文件夹甚至不同的文件可以有不同的版本。如果您正在查看的文件夹的修订版本比存储库中的版本早,那么您可以轻松地看到存储库中不再存在的文件。

事实上,这是我对 TortoiseSVN 的另一个问题。TortoiseSVN 并没有真正将这种类型的信息传递给您。

顺便说一句,我确实在 Windows 上使用 TortoiseSVN。但是,我必须让自己意识到我在使用它时提到的问题,否则我会发现我的存储库和我的工作目录不是完全一致的状态。

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


还有一件事:不要将文件复制回来并重新添加。对于 Subversion,这些是全新的文件,没有与之关联的历史记录。对你来说,有前一个文件的延续。几周后,当您突然发现合并不太对劲时,会引起欢闹。

相反,将文件从旧版本复制到当前工作目录:

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

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

于 2012-07-30T03:11:23.600 回答