svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted

解决SVN提交死循环问题

转自:http://blog.csdn.net/luojian520025/article/details/22196865

svn提交遇到恶心的问题,可能是因为上次cleanup中断后,进入死循环了。

错误如下:

 

解决方法:清空svn的队列

1.下载sqlite3.exe   

2.找到你项目的.svn文件,查看是否存在wc.db

3.将sqlite3.exe放到.svn的同级目录

4.启动cmd执行sqlite3 .svn/wc.db "select * from work_queue"

5.看到很多记录,下一步执行delete from work_queue

 

6.ok了,现在在到项目里面,执行cleanup,完全没问题了,图标状态也已经恢复了。


<think>我们引用中提到的问题是关于SVN客户端在更新时出现“Previous operation has not finished; run 'cleanup' if it was interrupted”错误。根据引用[3],该错误通常是由于非正常终止操作导致SVN的嵌入式数据库(SQLite)中某些表被锁定。引用[4]进一步说明,这些操作信息存放在一个名为wc.db的数据库的work_queue表中。 解决方法: 1. 运行SVNcleanup命令。但是,如果运行cleanup命令时仍然出现同样的错误,则需要手动清理数据库。 2. 手动清理:使用SQLite工具打开wc.db数据库,然后删除work_queue表中的记录。 具体步骤: a) 安装SQLite工具(如果还没有安装)。 b) 定位到工作副本的.svn目录(隐藏目录),找到wc.db文件。 c) 使用SQLite工具打开wc.db,执行SQL命令删除work_queue表中的记录。 d) 再次运行SVNcleanup命令。 注意:操作数据库前请备份wc.db文件。 详细步骤: 1. 打开命令行,进入你的SVN工作副本的根目录(即包含.svn目录的目录)。 2. 进入.svn目录,找到wc.db文件。 3. 使用SQLite命令行工具(如sqlite3)打开该数据库: ```bash sqlite3 wc.db ``` 4. 在SQLite命令行中,执行以下命令: ```sql DELETE FROM work_queue; ``` 或者,也可以先查看一下work_queue表中的内容(可选): ```sql SELECT * FROM work_queue; ``` 然后删除记录: ```sql DELETE FROM work_queue; ``` 5. 退出SQLite命令行(输入.exit或.quit)。 6. 返回工作副本根目录,运行SVN cleanup命令: ```bash svn cleanup ``` 7. 之后,应该可以正常进行update操作了。 如果问题仍然存在,可能需要检查是否有其他操作锁定了数据库,或者考虑重新检出工作副本(但这样会丢失本地未提交的更改,所以谨慎使用)。 注意:在操作过程中,请确保没有其他SVN进程在进行。 引用说明:根据引用[3],问题是由于SQLite数据库中的表被锁定,因此我们需要手动清理work_queue表[^3]。引用[4]提到操作信息存放在wc.db的work_queue表中[^4]。 相关问题: 1. 如何避免SVN操作被意外中断? 2. 除了手动清理work_queue表,还有哪些方法可以解决SVN的锁定问题? 3. 使用SQLite工具操作SVN数据库有哪些注意事项? </think>### 解决 SVN "Previous operation has not finished" 错误的方法 该错误表示 SVN 操作被异常中断,导致嵌入式数据库(SQLite)中的工作队列被锁定。以下是详细解决步骤: #### 方法 1:递归清理工作副本 ```bash svn cleanup --remove-unversioned # 递归清理工作副本 svn update # 尝试再次更新 ``` 如果仍然报错,继续执行方法2[^1][^2]。 #### 方法 2:手动清理数据库(推荐) 1. **定位数据库文件** 进入工作副本的隐藏目录: ```bash cd /path/to/your/project/.svn ``` 找到 SQLite 数据库文件 `wc.db` 2. **备份数据库**(重要!) ```bash cp wc.db wc.db.bak ``` 3. **清理工作队列** 使用 SQLite 命令行工具: ```bash sqlite3 wc.db ``` 在 SQLite 命令行中输入: ```sql DELETE FROM work_queue; -- 清空工作队列 DELETE FROM wc_lock; -- 移除锁文件 .exit -- 退出SQLite ``` 4. **尝试更新操作** ```bash cd .. # 返回项目根目录 svn cleanup # 再次清理 svn update # 执行更新 ``` #### 方法 3:深度清理(备用方案) 如果上述方法无效: ```bash svn cleanup --remove-ignored --remove-unversioned svn cleanup --vacuum-pristines # 清除临时文件 ``` #### 方法 4:重新检出(最后手段) ```bash svn checkout https://your-repository-url new-copy cp -R old-copy/* new-copy/ # 复制未提交的修改 svn status new-copy # 检查状态 svn commit -m "Recovered work" # 提交恢复的修改 ``` ### 根本原因分析 当 SVN 操作被强制中断时,SQLite 数据库中的表会被锁定: - `work_queue` 表:存储待执行操作 - `wc_lock` 表:防止并发访问 锁定时满足关系: $$ L_{\text{exist}} \wedge \neg C_{\text{complete}} $$ 其中 $L$ 表示锁存在,$C$ 表示操作完成[^3][^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值