subversion服务器升级记录

发布: 2012-06-21 11:27

背景;

本是升级次从subversion-1.6到subversion-1.7升级

服务器端svn与apache2.2整合,使用authz用户认证机制。


由于这个svn服务器有一个团队几十个人在使用,需要非常小心

在动手升级之前,查阅subversion-1.7文档,发现svn版本库不完成兼容,

不需要升级,这还好办一点了。


但是客户端的svn库是需要升级的,是什么问题呢,

就是自动分发系统从svn中检出代码,暂时放在服务器上,这与安装的svn客户端版本有关系。

svn客户端命令从1.6到1.7,版本数据库格式有不兼容的变化,必须显式使用svn upgrade命令更新,否则无法做其他的svn操作的。

由于整个svn检出库比较大,大概 1.5G,执行svn upgrade耗时比较长,使用的另一种解决方法,先在临时目录检出整个库,完成后替换,这样可异步的升级。


最后一个问题,subversion服务器端与apache整合,也不完全兼容。

在安装完成subversion-1.7与apache整合后,在commit提交代码时一直出现一个svn服务器端错误,如下,

客户端显示:

[gzleo@myhost trunk]$ svn commit -m ""

svn: E175002: 提交失败(细节如下):

svn: E175002: 服务器发送了意外的返回值(200 OK),在响应 “POST” 的请求 “/svndb/!svn/me” 中


服务器端log显示:

==> /usr/local/apache-2.2.14/logs/access_log <==

10.207.16.254 - - [04/Jun/2012:10:57:32 +0800] "OPTIONS /svndb/abcxxx/trunk/app/admin HTTP/1.1" 401 401

10.207.16.254 - guangzhao [04/Jun/2012:10:57:32 +0800] "OPTIONS /svndb/abcxxx/trunk/app/admin HTTP/1.1" 200 184

10.207.16.254 - guangzhao [04/Jun/2012:10:57:32 +0800] "POST /svndb/!svn/me HTTP/1.1" 200 1799



经查找官方的资料与buglist,确定在于这个请求被进默认的虚拟主机接收并处理了,并且返回了OK 200,

那么subversion则认为这不是一上svn请求,忽略了相关的处理,最终导致提交失败。


现有找到的这个问题的解决办法,虽然有效果,可用,但好象有点别扭,也没有找到其他的办法,就先用着了。

为apache创建一个默认虚拟主机(也就是配置第一个虚拟主机),让其不可对任何请求响应OK 200,而是响应 400 not found,这样subversion才会继续处理这一提交请求,成功完成commit请求。

该虚拟主机配置需要放在虚拟主机配置最前面,内容如下,


DocumentRoot /WEB/HTML/
ServerName nonamenoname.com
DirectoryIndex index.php


访问这个默认虚拟主机返回值应该为;

[gzleo@myhost Documents]$ wget http://10.207.16.254:8000/

--2012-06-04 15:04:26-- http://10.207.16.254:8000/

正在连接 10.207.16.254:8000... 已连接。

已发出 HTTP 请求,正在等待回应... 403 Forbidden

2012-06-04 15:04:26 错误 403:Forbidden。


整个升级过程虽然现在看来步骤简单明确,但在没有动手之前了只知道大概的,像第二上问题就是之前没有想到的,在反复试了两次之后才发现问题,并找到了这个解决方法。

目前经过几个的使用,倒是没有别的问题,一切还算正常。


svn 1.7客户端新建立的.svn只在根目录下出现,而不是在每个子目录下出来,应该存储效率比1.6老版本高了,从整体上看,占用的磁盘空间比原来上了很多。

这也算是升级的一个好处吧。




原文: http://qtchina.tk/?q=node/667

Powered by zexport