一、安装很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
使用参看了:这里 |