SVN 错误 – no such revision

Linux服务器不小心断电,重启后,修复了硬盘,但是SVN Server出问题了。在浏览器中访问,看似一切正常,但是要check out,update的时候,就报错 no such revision ‘xxx’,xxx是一个版本号。

对repository目录执行svnadmin verify,发现很早之前的版本还在,从某个版本号就出错了。Google了一通之后,发现搜索结果里和我的症状都不太相同。丢失的太多了,近期备份也没有,难道就重新建一个repository了事?

不过很快找到了问题所在,db/revprops目录中的文件从0开始,到了出错的版本号就没了。打开这些文件,发现是纯文本,格式如下:

K 10
svn:author
V 7
someone
K 8
svn:date
V 27
2008-07-08T19:54:09.605509Z
K 7
svn:log
V 9
log here.
END

显然,一个key(K)跟一个value(V),大写字母K、V之后是字符串的长度,revprops中的文件只是记录了每个版本提交的信息。

由于我们同时使用了trac,这些revprops文件丢失并没有损失,trac的数据库中都有保存,可以通过它来重新生成。但是为了简便起见,我就把最后一个存在的版本号文件复制了N遍:

for i in $(seq 250 500)
do
 cp 249 ${i}
done

250到500是缺失的版本号,249是最后一个存在的。就这样终于把版本库给修复了。

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.