svn cleanup:sqlite:数据库磁盘映像格式错误

时间:2012-12-03 00:32:15

标签: sqlite svn tortoisesvn

我正在尝试执行svn cleanup,因为我无法在工作副本中提交更改,并且出现以下错误:

  

sqllite:数据库磁盘映像格式错误

Cleanup failed to process the following paths

我现在能做些什么?

16 个答案:

答案 0 :(得分:88)

我遇到了同样的问题。以下博客文章帮助我解决了这个问题: http://www.polak.ro/svn-e200030-sqlite-database-disk-image-is-malformed.html

对sqlite数据库执行完整性检查以跟踪存储库(/.svn/wc.db):

sqlite3 .svn/wc.db "pragma integrity_check"

那应该报告一些错误。

然后您可以通过执行以下操作来清理它们:

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

如果之后仍有错误,您仍然可以选择将存储库的新副本签出到临时文件夹,并将.svn文件夹从新副本复制到旧副本。然后旧副本应该再次工作,您可以删除临时文件夹。

答案 1 :(得分:17)

完整性检查

sqlite3 .svn/wc.db "pragma integrity_check"

清理

sqlite3 .svn/wc.db "reindex nodes"
sqlite3 .svn/wc.db "reindex pristine"

替代地

您可以将可以读取的数据库内容转储到备份文件中,然后将其重新打包到新的数据库文件中:

sqlite3 .svn/wc.db

sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

mv .svn/wc.db .svn/wc-corrupt.db
sqlite3 .svn/wc.db

sqlite> .read dump_all.sql
sqlite> .exit

答案 2 :(得分:16)

SVN清理不起作用。我本地系统上的SVN文件夹已损坏。所以我刚删除了该文件夹,重新创建了一个新文件夹,并从SVN更新。这解决了这个问题!

答案 3 :(得分:12)

电源中断后,我遇到数据库磁盘映像格式错误错误,建议的reindex nodes命令没有解决因违反约束而导致的所有问题。此外,http://mail-archives.apache.org/mod_mbox/subversion-users/201111.mbox/%3C874nybhpxi.fsf@stat.home.lan%3E中描述的过程无法解决问题。

我的解决方案:

  • 再次将svn存储库签入临时文件夹
  • 将新结帐时的文件“.svn / wc.db”复制(即替换)为损坏的文件

如果您的原始svn checkout包含许多已修改或未版本控制的文件且您不想切换到新的svn结帐,这可能很有用。

答案 4 :(得分:12)

我从同行工作人员的目录中复制了.svn文件夹并解决了问题。

答案 5 :(得分:2)

也许,可能是一个解决方案:

  1. 右键单击项目
  2. 团队 - >断开
  3. 选择:同时删除...
  4. 现在,再次重新连接:

    1. 右键单击项目
    2. 团队 - >分享项目
    3. 选择您的repositorie:我的SVN(其他情况:git等)
    4. 选择您的repositorie文件夹
    5. 注意:

      在我的情况下,我做了我的文件备份。 (安全回复:P)

      修改:

      我在谈论SVN上的Eclipse插件:)

答案 6 :(得分:2)

  1. 在另一个地方看看这个svn
  2. 显示隐藏的.svn文件
  3. 替换wc文件
  4. 这适合我!

答案 7 :(得分:1)

您是否在颠覆网站上看到了this post?您还可以尝试直接验证并“修复”数据库,如here所述。 (请注意,我不是专家,我只是进行了快速谷歌搜索。可能与您的问题无关。)

就个人而言,我会尝试再次检查回购并重新应用您的更改。虽然在你的情况下,不确定这是否可行?

答案 8 :(得分:1)

在我的研究中,我发现了两种可行的解决方案。

  1. 如果您正在使用任何类型的连接,请使用ssh,samba,mount,disconnect / unmount以及重新连接/重新连接。再试一次,这经常为我解决问题。之后你可以进行svn清理或者继续正常工作(取决于出现问题的时间)。重新启动计算机也解决了一次问题...是的,我知道这是愚蠢的!

  2. 有些时候要做的就是rm -rf你的文件(或者如果你不熟悉这个术语,只需删除你的svn文件夹),并再次重新检查你的svn存储库。请注意,这并不总能解决问题,您可能还有一些不想丢失的更改。这就是我将它作为第二种选择的原因。

  3. 希望这可以帮助你们!

答案 9 :(得分:1)

我解决了我的visual svn server rep-cache.db腐败问题。

他们是两个解决方案。

停止Visual SVN Server服务。

从sqllite网站下载sqllite3.exe shell并将其复制到repo的db文件夹中。

在repo的db文件夹中的命令提示符处键入以下命令。

- 第一个解决方案 -

sqlite3 rep-cache.db

.clone rep-cache-new.db

按ctrl + c退出sqllite。

ren rep-cache.db rep-cache-old.db

ren re-cache-new.db rep-cache.db

- 第二个解决方案 -

删除rep-cache.db

del rep-cache.db

它将自动创建。

答案 10 :(得分:1)

I fixed this for an instance of it happening to me by deleting the hidden .svn folder and then performing a checkout on the folder to the same URL.

This did not overwrite any of my modified files & just versioned all of the existing files instead of grabbing fresh copies from the server.

答案 11 :(得分:1)

请不要在xs ++ [y]上浪费时间或从checking integrity表中删除数据,因为这是暂时的解决方案,过一会儿您就会回来。

只需再做一个work queue,然后用新的文件夹替换现有的.svn文件夹。进行checkout,然后应该顺利进行。

答案 12 :(得分:0)

如果您安装了Tortoise SVN,请转到任务管理器并停止它。 然后尝试删除该文件夹。它会起作用

答案 13 :(得分:0)

根据颠覆清除,标记的答案可能是正确的答案。但是错误绝对是一个普遍的错误,导致我在此找到问题页面。

我们的项目具有依赖项System.Data.SQLite,并且错误消息相同:

数据库磁盘映像格式错误

就我而言,我已经通过SQLiteStudio 3.1.1执行了以下检查脚本和以下检查脚本。

pragma integrity_check

(我不知道这些统计信息是否会有所帮助,但我还是要分享给他们...)

通过内存上的连接日志模式,DataBase文件每天使用1.5年,其大小约为750 MB。每张表大约有14万条记录,其中有6张如此大。

执行完整性检查脚本后,执行30分钟后返回了11行。

wrong # of entries in index sqlite_autoindex_MyTableName_1
wrong # of entries in index MyOtherTableAndOrIndexName_1
wrong # of entries in index sqlite_autoindex_MyOtherTableAndOrIndexName_2
etc...

所有结果均与索引有关。 在重新构建每个索引之后,我的问题已解决。

reindex sqlite_autoindex_MyTableName_1;
reindex MyOtherTableAndOrIndexName_1;
reindex sqlite_autoindex_MyOtherTableAndOrIndexName_2;

重新索引后,完整性检查结果为“ ok”。

我去年遇到此错误,我从备份中还原了数据库,然后重新提交了所有更改,这真是一场噩梦...

答案 14 :(得分:-2)

在应用程序开发期间,我发现消息来自频繁且大量的INSERT和UPDATE操作。 确保在一次操作中插入和更新多行或数据。

var updateStatementString : String! = ""

for item in cardids {

let newstring = "UPDATE "+TABLE_NAME+" SET pendingImages = '\(pendingImage)\' WHERE cardId = '\(item)\';"
            updateStatementString.append(newstring)

        }


        print(updateStatementString)
        let results = dbManager.sharedInstance.update(updateStatementString: updateStatementString)

        return Int64(results)

答案 15 :(得分:-4)

cd到包含.svn的文件夹

rm -rf .svn
svn co http://mon.svn/mondepot/ . --force