我在一个工作文件夹中有很多更改,在尝试进行更新时出错了。

现在当我发出'svn cleanup'时,我得到:

>svn cleanup .
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'MemPoolTests.cpp' is not under version control

MemPoolTests.cpp是另一个开发人员添加的新文件,在更新中被删除了。以前我的工作文件夹里不存在。

我能做些什么来尝试并继续前进,而不必签出存储库的新副本吗?

澄清:感谢您提出的关于将目录移出并删除一个新副本的建议。我知道这是一个选项,但这是我想避免的,因为有许多更改嵌套在几个目录深处(这应该是一个分支…)

我希望有一种更积极的方式来做清理,也许以某种方式迫使文件SVN有麻烦回到一个已知的状态(我尝试删除它的工作副本…这并没有帮助)。


当前回答

在SVN 1.7中,情况发生了变化,删除. SVN目录中的日志文件的流行解决方案在迁移到数据库工作复制实现后不再可行。

以下是我做的似乎有效的方法:

删除工作副本的.svn目录。 在一个新的临时目录中启动一个新的签出。 取消签出(我们不想等待所有东西都被拉下)。 对取消的签出运行清理。 现在我们有了一个新的.svn目录和一个干净的数据库(虽然没有/很少的文件) 将这个.svn复制到旧的、损坏的工作目录中。 运行svn update,它将使新的部分.svn目录与旧的工作目录保持一致。

这一切都有点令人困惑,就流程而言。本质上,我们所做的是删除损坏的.svn,然后为相同的签出路径创建一个新的.svn。然后,我们将这个新的.svn移到旧的工作目录中,并将其更新到repo。

我刚刚在TSVN中这样做了,它似乎工作得很好,不需要完整的签出和下载。

杨晨

其他回答

当我用TortoiseSVN (Windows)遇到这个问题时,我去Cygwin并从那里运行“svn cleanup”;它为我正确地清理,之后一切工作从TortoiseSVN。

我只是从~\. xml文件中删除了svn-xxxxxxxx文件。Svn \tmp文件夹,其中XXXXXXXX是数字。

这个答案只适用于1.7之前的版本(感谢@ŁukaszBachman)。

Subversion将它的信息存储在每个文件夹中(在.svn中),所以如果你只是处理一个子文件夹,你不需要签出整个存储库-只需要签出已经中断的文件夹:

cd dir_above_borked
mv borked_dir borked_dir.bak
svn update borked_dir

这将为您提供borked文件夹的良好工作副本,但您仍然在borked_dir.bak中备份了更改。同样的原则也适用于Windows/TortoiseSVN。

如果在独立文件夹中有更改,请查看

svn checkout -N borked_dir   # Non-recursive, but deprecated

or

svn checkout --depth=files borked_dir
# 'depth' is new territory to me, but do 'svn help checkout'

这里的回答没有帮助我,但是在再次检出项目之前,我关闭并打开Eclipse (subversion是我的SVN客户端),问题消失了。

(在尝试移动文件夹和执行新的签出之前。)

删除有问题文件所在的文件夹——是的,甚至是.svn文件夹 在最上面的/ parent文件夹上进行SVN清理。