前言
svn是目前使用比较多的版本控制软件,目前在windows下面的常用的svn客户端是乌龟,svn服务器常用的是 VisualSVN Server.在windows下面的客户端使用比较简单,例如VisualSVN就是傻瓜式操作。目前在linux下,svn服务器一般有两个选择:svnserve和apache,下文就主要介绍怎么在ubuntu9.10里安装和使用svn服务器。
Part 1:安装和创建本地库
在ubuntu下,需要安装的有apache2 subversion libapache2-svn
$ sudo apt-get install apache2 subversion libapache2-svn
现在所有需要的软件都安装上了,下一步在本地建一个目录作为本地仓库
$ mkdir /home/myrepos
$ svnadmin create /home/myrepos
到这一步,你就在本地建了一个代码仓库,你可以往里面加入工程,代码,并且可以在任何时候将代码回到你想要的时候。
例如现在有个工程,名称为 myproject,加入所在的路径是 /root/temp/myproject , 现在你想将这个工程导入到你的本地仓库中。
$ svn import -m "first import" /root/temp/myproject file:///home/myrepos
这样这个工程就在你的本地仓库里了。现在你可以在本地任何目录里,从你的本地库里获取一个你的工程的拷贝。
$ svn checkout file:///home/myrepos
在这个拷贝里,你可以做修改,并通过命令提交到主干上。
$ svn commit -m " i have modify file"
加入你在这个拷贝里面新建了一个文件,叫做 c.java,你可以提交到本地库中。
$ svn add c.java
$ svn commit -m "first commit"
Part 2:svn服务器svnserve
svnserve和apache相比是轻量级的,也比较简单,svnserve包含在subversion里面,所以只要安装了subversion就相当于安装了一个小型的svn服务器。它使用自己的一套协议通信。例如访问apache时使用 http:// 前缀,而svnserve使用 svn:// 前缀.
上节里面我们在本地建了一个myrepos本地库,现在我们让svnserve运行起来
$ svnserve -d -r /home/myrepos
如果出现,这样的错误信息,“svnserve: 不能绑定服务器套接字: 地址已经被使用”
那先把svnserve进程干掉。
具体做法是
$ ps -aux #查看进程,svnserve的pid为23647
$ kill -9 23647 #干掉svnserve
再次运行$ svnserve -d -r /home/myrepos
在局域网内的机器就可以和svnserve进行通讯。假如你的本机ip是10.13.37.84.可以通过下面的命令获取到拷贝。
$ svn checkout svn://10.13.37.84 myproject
这样一个简单的svn服务器就算建好了。
下一步我们来做权限管理
修改/home/myrepos/conf/svnserve.conf 改成下面这样
anon-access = read
auth-access = write
password-db = passwd
其中anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,这很好,我们不需要改它们。但如果想拒绝匿名用户的访问,只需把 read 改成 none 就能达到目的。password-db 后的 passwd 则为定义用户名及密码的文件路径。这个文件默认跟 snvserve.conf 在同一个目录,下面看看怎么配置 passwd 中的内容。
# harry = harryssecret
# sally = sallyssecret
我们新建个自己的账户。
tester = mypasswd
这样tester就有写的权限了。
$svn commit -m " i am so strong" --username tester --password mypasswd
Part 3:svn服务器apache
现在我们使用apache作为svn服务器,apache支持http协议通信,配置也比较简单,主要是权限配置。
首先安装好apache。然后进去/etc/apache2/conf,修改apache2.conf,在下面加入
<Location "/myrepos">
DAV svn
SVNPath /home/myrepos
AuthType Basic
AuthName "Your repository name"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
其中/etc/subversion/passwd这个文件中保存的是用户信息,这个文件需要我们新建。
然后添加一个用户
$ sudo htpasswd /etc/subversion/passwd tester
你需要把 repo 所在的目录和文件的所有权都改成系统中操作 Apache 的用户,这样在 commit 的时候才会被 Apache 认可。在 Ubuntu 中,这个用户叫 www-data
$ sudo chown -R www-data /home/myrepos
然后我们重启apache
$ sudo /etc/init.d/apache2 restart
最后我们测试一下,在浏览器里输入http://localhost/myrepos/
看见了工程目录就成功了。
在局域网中,也可以访问。
$ svn checkout http:// #svn服务器ip# /myrepos
参考:http://bemike.org/posts/258