我在一个工作文件夹中有很多更改,在尝试进行更新时出错了。
现在当我发出'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有麻烦回到一个已知的状态(我尝试删除它的工作副本…这并没有帮助)。
这个答案只适用于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'
每当我有类似的问题,我使用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/
这样您就有了一个新的签出,但是使用相同的工作文件。
对我来说,这总是很有效。