为什么会发生这种情况?这是一个很难回答的问题。不过,我知道这种类型的东西发生了很多与TortoiseSVN。这与程序没有太大关系,但通常是由于人为错误。
TortoiseSVN使用Windows资源管理器的界面,这可能是一个问题。在资源管理器中,我可以通过按下按钮来重命名,拖放和删除以及删除文件。不幸的是,我无意使用Explorer处理Subversion。
使用TortoiseSVN,如果我要移动工作目录中的文件,我必须使用TortoiseSVN上下文菜单。如果我想重命名一个文件,我必须进入TortoiseSVN上下文菜单。这是我通常与Explorer交互的方式的一个突破,而且很容易忘记。
有一点你必须记住的是,一个工作副本本身可能并不全都在同一个版本上。不同的文件夹甚至不同的文件可以有不同的版本。如果碰巧看到的文件夹比版本库中的文件夹更早版本,那么您可以轻松地看到存储库中不再存在的文件。
事实上,这是我与TortoiseSVN的另一个问题。 TortoiseSVN并不真正将这种类型的信息传递给你。
顺便说一句,我确实在Windows上使用了TortoiseSVN。但是,我必须让自己意识到我在使用它时遇到的问题,否则我会发现我的存储库和我的工作目录不完全一致。
我大量使用TortoiseSVN附带的命令行客户端。我发现命令行客户端可以提供更多信息,更容易让事情恢复同步。我建议任何使用TortoiseSVN的人学习命令行客户端,并在TortoiseSVN可能导致你误入歧途的情况下使用它。我的90%的提交都是通过命令行客户端完成的,我使用命令行客户端执行了大量的svn status命令。我发现它保持了TortoiseSVN的检查。
一两件事:不要将文件复制回来,并添加它们放回要颠覆,这些都没有与之相关联的历史品牌的新文件。对你来说,前面的文件有一个延续。在几个星期内,当你突然发现合并时出现一些不太合适的事情时,会出现闹剧。
相反,文件从旧的版本复制到当前的工作目录:
$ svn cp -r30 ^/trunk/[email protected] .
这将链接版本30(假设这是此文件之前,它已被删除的最后修订)当前工作复制。历史将是正确的,你和Subversion都会同意该文件的状态。