升级及迁移svn本地版本库

Subversion有一点很麻烦,每次版本升级时格式都会变,导致本地版本库不能用。这几天公司的版本库由1.6升级到了1.7,并且版本库的URL也发生了变化。以前遇到这种情况,一般都会删除本地版本库,然后再重新check out。不过因为版本库比较大,check out一次需要很长时间,于是在网上查了一下,找到一种简单的解决办法。

首先要解决svn版本升级的格式不兼容问题,如果用1.7版本的svn在1.6版生成的work copy上使用命令,会遇到如下错误:

$ svn info
svn: E155036: Please see the 'svn upgrade' command
svn: E155036: Working copy '/home/easwy/dev' is too old (format 10, created by Subversion 1.6)

此时可以使用svn upgrade命令,对本地版本库的格式升级:

$ svn upgrade
Upgraded '.'
Upgraded 'scripts'
Upgraded 'merge-info'
Upgraded 'merge-log'
......

因为服务器的地址也变化了,所以升级完本地版本库后,需要把版本库的地址迁移到新地址上去,可以使用以下命令:

$ svn switch --relocate http://server-url/svn/dev http://new-server-url/svn/repos/dev

此命令执行完后,再用svn info看一次,会发现本地版本库的地址已经切换到新的服务器地址了。
这种操作方式,比重新check out要方便太多了!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/svn-upgrade-and-switch/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在debian etch中配置subversion版本管理

以下操作如无特殊注明,均为root执行的操作。

安装软件包

首先,需要下载安装下列软件包:

  • apache2
  • apache2-common
  • apache2-utils
  • libapache2-svn
  • openssl
  • ssl-cert
  • subversion
  • subversion-tools

使用apt-get install命令安装上列软件包。

生成SSL自认证证书

如果要加密对版本服务器的访问,需要启用SSL。你可以到商业证书颁发机构去申请一个合法的证书,也可以采用自认证的方式。我们用下面的命令生成SSL自认证证书,并把它放在/etc/apache2/ssl/目录中。

mkdir /etc/apache2/ssl
/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem 

根据提示回答相应的信息,最后就会生成所需的证书了。

配置apache2

在apache2中启用ssl模块,使用下面的命令:

a2enmod ssl 

接下来,配置虚拟主机来使能ssl,我的apache2服务器只提供版本库的加密访问,不提供基本的http web服务,所以关闭了80端口,只开启443端口。

修改/etc/apache2/sites-available/default文件,将前两行改为:

NameVirtualHost *:443
<VirtualHost *:443> 

然后在文件中加入下面的内容:

      SSLEngine On
      SSLCertificateFile /etc/apache2/ssl/apache.pem 

上面的语句打开了SSL引擎,使用我们刚刚生成的证书文件进行认证。

default虚拟主机应该缺省已经使能了,也就是在/etc/apache2/sites-enabled/目录中已经存在一个符号链接,指向/etc/apache2/sites-available/default。如果没有的话,可以使用下面的命令使能这个虚拟主机:

a2ensite default 

现在修改文件/etc/apache2/ports.conf,把文件的内容改为:

Listen 443 

也就是我们的apache2只监听443端口。

好了,现在启动apache2:

/etc/init.d/apache2 start 

如果你没有使用ServerName配置主机名的话,会提示下面的错误,忽略即可:

Starting web server (apache2)...apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName 

在浏览器中输入如下URL,看是否能够访问:

https://127.0.0.1/
    

如果正常的话,你会看到一个缺省的页面,上面显示”It works!“。如果没有出现此页面,可能你的apache2配置有问题,查看一下错误日志和访问日志,以定位问题。这两个日志的缺省位置在 /var/log/apache2/。

配置subversion

首先新建一个用户svnadmin来管理版本库,使用下面的命令:

addgroup svn
adduser svnadmin –ingroup svn
adduser www-data svn 

上面的命令首先创建一个svn用户组,然后创建用户svnadmin,并把这个用户放在svn组中。第三个命令则是把www-data用户也加入到svn组,因为web server是以www-data用户在运行的,要从web server读写版本库,www-data用户必须有版本库的读写权限。

现在用su – svnadmin命令切换到svnadmin用户,我们要保证svn用户组的所有用户都具备版本库的读写权限,所以修改svnadmin的umask,修改svnadmin用户的~/.bashrc,在文件中加入下面这行:

umask 002 

退出再重新登录。这样,由svnadmin创建的版本库,就可以被所有属于svn组的用户读写了。

现在创建版本库(由用户svnadmin执行下面的命令):

svnadmin create ~/repos/svntest 

我们创建了一个名为svntest的版本库。如果你已经有cvs的版本库,想把它转到subversion上,可以安装cvs2svn软件包,用里面的工具进行转换。

配置apache2/SVN

首先,使能apache2的dav_svn模块:

a2enmod dav_svn 

我们使用基本的http认证对访问版本库的所有用户进行认证,只有认证用户才有版本库的访问权。

首先为版本库的用户生成密码文件:

htpasswd -cm /etc/svnusers xxxxx
htpasswd -m /etc/svnusers yyyyy 

上面的命令创建了密码文件/etc/svnusers,并增加两个用户xxxxx和yyyyy。

然后在/etc/apache2/sites-available/default文件中加入如下语句:

<Location /svn>
DAV svn
SVNParentPath /home/svnadmin/repos
AuthType Basic
AuthName "Subversion Auth"
AuthUserFile /etc/svnusers
require valid-user
</Location> 

这段话,对URL中指向/svn目录的访问请求,使用DAV进行访问。我们把/home/svnadmin/repos做为所有版本库的父目录,在该目录下可以增加多个版本库。另外,使用/etc/svnusers密码文件对用户进行认证。

现在,重启apache2服务:

/etc/init.d/apache2 restart 

在浏览器中输入:

https://127.0.0.1/svn/svntest 

这时,会询问你是否接受服务器的证书,选择接受,然后输入你的用户名和密码,验证通过后,在浏览器中就可以看到版本库了。

测试通过后,你就可以使用其它的subversion客户端对版本库进行访问了。

[参考文档]

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/subversion-configuration-in-debian-etch/

文章的脚注信息由WordPress的wp-posturl插件自动生成