SUBVERSION的SSL方式安装及最常用而简单的分支使用模式
 

2008-12-26 作者:alwayscy 来源:blogjava.net

 

一、安装很easy

Debian下:

安装Subversion包:

apt-get install subversion

安装SSL方式访问所需要的包,注意必需要apache2才行。这里libapache2-svn包括一个dav模块用来通过APACHE模块访问SVN数据;openssl是用来生成证书用的;apache2-utils是包括a2enmod命令,不要也行。

apt-get install apache2 libapache2-svn openssl apache2-utils

其它系统,WINDOWS下就下载相应包来直接安装。

LINUX下需要下载包后解压,再make & make install,在这里,少不了就是这些:

tar xjvf subversion-xxx.tar.bz2

cd subversion-1.3.1

./configure --prefix=/usr/local/subversion

make

另外,需要在开发机器上安装访问客户端,在这里

这个客户端相当好用,和explore结合的相当好。

二、SSL访问是上上之选

强烈建议使用WEB的SSL方式来使用服务,虽然开始配置麻烦点,但一劳永逸。

这种方式比较安全,且不占用多余端口,另外,从外部通过WEB方式访问时也比较安全。量大不加价。

三、subversion配置十分简单

官方配置使用文档相当清楚易懂,在这里。缺点就是婆婆妈妈一大堆,废话太多。下面是过程:

找个地方,为subversion创建一个根目录,以后所有东西都放这里。先以root用户先建立目录,呆会再改权限:

svnadmin create /svnroot

编辑/svnroot/conf/svnserve.conf,就3句话:

[general]

anon-access =none

auth-access = write

password-db = passwd

顺次是:没认证的不能登陆;通过认证的有写权限;密码文件是本目录下的passwd文件。

马上编辑这个/svnroot/conf/passwd文件,加入你要的用户:

[users]

harry = harrypass

sally = sallypass

再来说下权限,svnroot最好让一个单独的系统用户访问,不用root更安全。现在创建个srcusr:

popeye:~# useradd srcusr

popeye:~# passwd srcusr

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully

把目录权限交给这个用户:

chown –R srcusr:srcusr /svnroot/

因为apache2是以www-data用户运行的,要让它也能写这个目录,不然你怎么commit呢。

adduser www-data usrsrc

chmod -R g+w /svnroot/

先将它加入usrsrc用户组,再修改属性让组成员有写权限。

到这步,如果你要求不高,就算配置完成了,一句:

svnserve -d --listen-port 3690 --listen-host 0.0.0.0 -r /svnroot

启动就可以用了,当然客户端访问要用,svn://打头。注意listen-host去不得,不然就是用ipv6侦听,你就啥也连不过来了。

最好还是以srcusr用户权限来启动那就这样写:

su – srcusr –c “svnserve -d --listen-port 3690 --listen-host 0.0.0.0 -r /svnroot”

由于我们要配置更安全的方式所以继续往下走。

四、透过APACHE2来访问SUBVERSION服务(非SSL方式)

加载mod_dav_svn和ssl模块:

a2enmod mod_dav_svn

a2enmod ssl

这是个工具,名字就是add to enable module,如果没有这个工具,可以直接:

cd ./mods-enabled/

ln -s /etc/apache2/mods-available/ssl.* .

建立enable到available的链接,就是开启模块了,跟这个命令干的事一样。

编辑/etc/apache2/httpd.conf文件,加入SUBVERSION的几行配置,注意开头处的/repos表明了你在URL里识别路径。如:

http://your.host.com/repos/project1/trunk

APACHE2发现是/repos路径,就会调用DAV模块,访问的就是系统路径:

/svnroot/project1/trunk

配置如下:

ServerName localhost

<Location /repos>

#用DAV模块访问数据

 DAV svn

#你的SVN根路径

 SVNPath /svnroot

#如果不要SSL,可以不要下面这句

 SSLRequireSSL

 AuthType Basic

 AuthName "Subversion repository"

#在下面我们马上要建立这个密码文件

 AuthUserFile /etc/svn-auth-file

 Require valid-user

</Location>

为之前/svnroot/conf/passwd里的用户生成HTTP的验证文件:

$ htpasswd -cm /etc/svn-auth-file harry

New password: *****

Re-type new password: *****

Adding password for user harry

$ htpasswd -m /etc/svn-auth-file sally

New password: *******

Re-type new password: *******

Adding password for user sally

重启服务:

/etc/init.d/apache2 restart

到这里,如果你不用SSL,那么就可以用http://your.host.com/repos/project1/trunk

形式的网址访问了。浏览器会让你输入用户名密码。

但这种方式密码和内容是明文传送,为了安全我们还是需要SSL方式。

五、SSL配置一步一步来也不麻烦

SSL跟subversion没有什么关系,是APACHE2的配置,这些配置也适用于你想让人家用https来访问你网站的情况。

先通过我之前的一篇文章,不但了解了SSL是咋回事,还顺便生成了APACHE要的证书。

注意:只要看到:cat key.pem cert.pem >key-cert.pem生成了这个文件就可以了。

把这个文件改名并存到:/etc/apache2/ssl/apache.pem,后面配置时用。

文章:在这里。开始我也不会,会了以后,发现很简单。

现在基本条件都已经具备,只要让APACHE2使用SSL的443端口(即https)就可以了。

先在/etc/apache2/ports.conf里加入:

Listen 80

<IfModule mod_ssl.c>

    Listen 443

</IfModule>

这样APACHE2就会在443侦听。

再编辑一个虚拟HOST文件,让APACHE2识别SSL:

cp ./sites-available/default ./sites-enabled/ssl

有点像启动MODULE时候的方式,在ENABLED目录加入一个文件,从一个DEFAULT文件开始。

编辑这个文件,只要改变开头:

NameVirtualHost *:443

<VirtualHost *:443>

        SSLEngine On

        SSLCertificateFile /etc/apache2/ssl/apache.pem

……

这里的配置就用到了我们先前生成的证书文件。

另外,原来在此目录下有一个文件,也需要改一下,把开头改成:

NameVirtualHost *:80

<VirtualHost *:80>

这样就有两个虚拟HOST,分别是80和443端口。

重启服务:

/etc/init.d/apache2 restart

再以https://your.host.com/repos/project1/trunk访问就可以看到像访问其它HTTPS网站弹出的接受证书的对话框。在TortoiseSVN里,也是输入这个路径就可以。

好多文档讲得相当复杂,其实,天长日久的基本使用无非就是那几项。

下面是简单明了的使用方式:

将存在的项目导入到SVN:

mkdir -p /tmp/svn/usertools/trunk
cd /path/to/usertools
cp -Rp * /tmp/svn/usertools/trunk
cd /tmp/usertools
cd /tmp/svn
svn import svn://servername_or_IPADDRESS/svnroot ."
     -m "Initial import of usertools"

之后,可以在任意地方将整个项目CHECKOUT出来进行编辑。我觉得SVN最大好处是不用像CLEARCASE那样每个文件都要CHECKOUT才能编辑,它是一次CHECKOUT,最后再全部COMMIT:

svn checkout svn://servername_or_IPADDRESS/svnroot/usertools/trunk "
        usertools-current

我们就这样开发下去,不断向TRUNK分支COMMIT代码,直到有一天我们要RELEASE了,就再创建两个分支,用svn copy命令:

svn copy svn://servername_or_IPADDRESS/svnroot/usertools/trunk "
        svn://servername_or_IPADDRESS/svnroot/usertools/1.0-release
svn copy svn://servername_or_IPADDRESS/svnroot/usertools/trunk "
        svn://servername_or_IPADDRESS/svnroot/usertools/1-maint

一个是RELEASE分支,一个用来做维护。这样,我们继续开发新功能到TRUNK上,如果需要维护,就在1-maint分支上做,如果有需要可以把改动MERGE回TRUNK:

svn checkout svn://servername_or_IPADDRESS/svnroot/usertools/1-maint "
        usertools-1-maint
cd usertools-1-maint
svn merge -r svn://servername_or_IPADDRESS/svnroot/usertools/trunk
svn commit -m "Merged mantein branch into trunk"

如果需要RELEASE1.1版本,直接在1-maint上做:

svn copy svn://servername_or_IPADDRESS/svnroot/usertools/1-maint "
        svn://servername_or_IPADDRESS/svnroot/usertools/1.1-maint

最后,MERGE图是这样:

------------------------------------------------ usertools-trunk -->
\                             |           |   \
 ----- usertools-1.0          |           |    --- usertools-2.0
 |                            |           |    |
 ------ usertools-1.0-maint ---------------    ---- usertools-2.0-maint
                            \               \
                             usertools-1.1 usertools-1.2

使用参看了:这里


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织