如果我试图更新我的subversion repo,它说我必须运行清理。如果我运行清理,它会显示一个文件丢失。(我删除了今天早上在我的家庭电脑上未能提交的文件的MASSIVE目录,但后来我从工作中提交了相同的文件集,现在我的家庭回购崩溃了)。所以,清理的意思是:
Cleanup failed to process blablabla Can't set file blablabla read-write:系统找不到指定的文件。
如果我更新它说:
命令:更新错误:上一个操作尚未完成;
如果它被中断,请运行'cleanup'
“清理”命令。完成了!:
我怎么才能把它弄出来呢?
通常不需要新的签出或复制。
我刚刚解决了一个类似的问题,与错误“先前的操作尚未完成”的帮助下(链接)
svn在处理命令/操作时似乎有时会卡住。
所有这些操作都存储在.svn文件夹下的数据库文件wc.db中。
通过下载SQLite到我的结帐目录并运行
sqlite3.exe .svn/wc.db "select * from work_queue"
您可以获得所有挂起操作的列表。错误将这些操作称为“未完成”操作。
通过运行
sqlite3.exe .svn/wc.db "delete from work_queue"
所有旧的操作都从工作队列中删除,错误也消失了。
不需要新的收银台什么的
当您尝试SVN切换/清理时,文件仍然打开时,可能会发生这种情况。
我有一个分支,在那里我创建了一个新文件,我在另一个应用程序中打开了这个文件。切换到另一个分支无法删除文件,导致切换失败。这也导致了svn清理失败,但这在Tortoise svn UI中没有显示为原因。
从控制台窗口(在根文件夹上)运行svn cleanup会清楚地显示错误文件\location\file。ext:该进程无法访问该文件,因为该文件正在被其他进程使用
关闭任何打开的文件句柄/ windows并运行控制台svn清理,然后允许清理工作正确地进行。
长话短说,在控制台中运行svn清理,查看更详细的错误。
根据Sigurd V的回答(你应该先尝试一下),一些较大的代码库有多个'。Svn的文件夹,它不一定是根目录中有锁定任务的文件夹。
如果是这样的话,你必须检查每一个。如果你已经有了SQLite和Powershell,你就可以快速地找到有问题的目录。
要查找哪些文件夹被锁定运行(将路径\替换为\sqlite.exe):
Get-ChildItem -Path。过滤器”。svn' -递归-隐藏| foreach {$toFind = $_。FullName + "\wc.db";gci $查找| foreach {echo $_。FullName;路径\ \ sqlite.exe $ _。select * from work_queue}}。
这给出了一个.svn目录列表,在每个目录下面是当前任务的列表。
如果有任何未完成的任务,每次运行(将路径\替换为\sqlite.exe和路径\替换为\.svn\wc.db):
路径\到\sqlite.exe路径\到\.svn\wc.db "delete from work_queue"