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

现在当我发出'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 cleanup命令(如果它在Eclipse中失败,这是我的情况):

~/path/to/svn-folder/$ svn cleanup

我尝试了这里解释的不同解决方案,但没有一个奏效。

行动小组→更新头部失败:

svn: E155004:“/home/user/path/to/svn-folder”下有未完成的工作项;先运行'svn cleanup'。

Action Team→清理失败,错误相同。

解决方案:在终端上执行svn cleanup命令。

命令执行成功。

然后Team→Update in Eclipse再次工作。

注意:我的SVN版本是1.9.3。

如果svn cleanup不起作用,还检查Chris的回答。

如果问题是大小写敏感(签出到Mac和Windows时可能会出现问题),并且你没有签出到*nix系统的选项,下面的方法应该可以工作。这是从头开始的过程:

% svn co http://[domain]/svn/mortgages mortgages

(接着是结帐……然后……)

svn: In directory 'mortgages/trunk/images/rates'
svn: Can't open file 'mortgages/trunk/images/rates/.svn/tmp/text-base/Header_3_nobookmark.gif.svn-base': No such file or directory

这里,SVN试图检出两个名称相似但大小写不同的文件——Header_3_noBookmark.gif和Header_3_noBookmark.gif。Mac文件系统默认为大小写不敏感,在这种情况下会导致SVN阻塞。所以…

% cd mortgages/trunk/images/rates/
% svn up
svn: Working copy '.' locked
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)

但是,正如我们所知,运行svn cleanup不起作用。

% svn cleanup
svn: In directory '.'
svn: Error processing command 'modify-wcprop' in '.'
svn: 'spacer.gif' is not under version control

gif不是这里的问题…它只是不能从前一个错误移动到下一个文件。所以我删除了目录中除了. SVN之外的所有文件,并删除了SVN日志。这使得清理工作得以进行,这样我就可以检出并重命名有问题的文件。

% rm *; rm -rf .svn/log; svn cleanup
% svn up Header_3_nobookmark.gif
A    Header_3_nobookmark.gif
Updated to revision 1087.
% svn mv Header_3_nobookmark.gif foo
A         foo
D         Header_3_nobookmark.gif
% svn up
A    spacer.gif
A    Header_3_noBookmark.gif

在此之后,我可以返回到项目的根目录,并运行svn up来检查它的其余部分。

每当我有类似的问题,我使用rsync(注意:我使用Linux或Mac OS X)来帮助这样:

# Go to the parent directory
cd dir_above_borked

# Rename corrupted directory
mv borked_dir borked_dir.bak

# Checkout a fresh copy
svn checkout svn://... borked_dir

# Copy the modified files to the fresh checkout
# - test rsync
#   (possibly use -c to verify all content and show only actually changed files)
rsync -nav --exclude=.svn borked_dir.bak/ borked_dir/

# - If all ok, run rsync for real
#   (possibly using -c again, possibly not using -v)
rsync -av --exclude=.svn borked_dir.bak/ borked_dir/

这样您就有了一个新的签出,但是使用相同的工作文件。 对我来说,这总是很有效。

我也有同样的问题。我不能承诺,清理工作就会失败。

使用命令行客户端,我能够看到一条错误消息,表明它无法将文件从.svn/props移动到.svn/prop-base。

我查看了特定的文件,发现它被标记为只读。删除只读属性后,我能够清理文件夹并提交我的更改。

我也遇到过同样的问题。在网上搜了一下,找到了下面这篇文章。然后意识到我的登录用户与我用来安装SVN的用户不同,这基本上是一个权限问题。