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

现在当我发出'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有麻烦回到一个已知的状态(我尝试删除它的工作副本…这并没有帮助)。


当前回答

如果以上都失败了:

签出到一个新文件夹中。 复制修改过的文件。 检查回来。 在删除旧文件夹并使用新文件夹之前,将旧文件夹压缩到某个地方(你永远不知道+偏执狂是好的)。

其他回答

每当我有类似的问题,我使用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/

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

在经历了这里引用的大多数解决方案之后,我仍然得到了错误。

问题是不区分大小写的OS x。签出包含两个同名但大小写不同的文件的目录会导致问题。例如,approationtest .java和approationtest .java不应该在同一个目录中。一旦我们删除了其中一个文件,这个问题就消失了。

在之前的回答中有一些非常好的建议,但如果你在Windows上使用TortoiseSVN(一个好产品,但是…)时遇到问题,总是退回到命令行,首先做一个简单的“svn清理”。

在许多情况下,Windows客户端不会运行清理命令,但是使用SVN命令行实用程序可以很好地进行清理。

我还遇到了清理失败的问题。最初我试图提交一些代码,但它说:

svn: E155004: '/my/path/to/files'中有未完成的工作项;先运行'svn cleanup'。

但当我试图清理的时候:

svn: E155007: '/my/path/to/files'不是工作拷贝目录

以我为例,结果是我在复习方面遇到了冲突。我的svn文件夹包含.mine、.r1和.r2文件。一旦我解决了冲突,清理工作就成功地运行了。

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