作者:rao_warrior
转自:http://blog.youkuaiyun.com/rao_warrior/article/details/8271303
SVN 配置
1、序言
Subversion是一个自由,开源的版本控制系统,是CVS的接班人。目前,绝大数开源软件都使用SVN作为代码版本管理软件。在Subversion管理下,文件和目录可以超越时空。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可以籍此将数据恢复到以前的版本,并可以查看数据的更改细节。Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。
比如我有一个项目,有很多文件,包括项目的相关文档,图表等,它们都被放在一个文件夹内。随着项目的发展,文件夹内的会增加新的文件,而老的文件也会被修改,同时也许会有一些文件会被删除。在版本控制系统下,每一次对该项目文件夹下的改动,都会被记录,如果哪个文件被删错了,或是想把文档恢复到以前的版本,可以轻而易举的达到。更了不起的是,如果该项目被一个团队来执行,该团队的每一个成员都可以对项目内的文件进行管理和同步,这样就可以保持大家永远 on the same page。
2、建立自己的Repository
2.1 基础知识
在Subversion(以下简称svn)中有两个概念要清楚,一个是repository(以下简称repo),一个是working copy(以下简称wc)。repo是项目所在的地方,wc是你做修改的地方,两者的内容可以完全一样,也可以完全不同。你在wc中所做的修改可以commit到repo中,如果你成功地把wc中的内容commit到repo中,那么repo就会自动更新一个版本(revision)。如果不对wc中所做的修改进行commit操作,则wc中所做的任何修改都不好对项目产生任何影响。如果需要,我们可以随时把wc替换成任何一个revision。
此次SVN是在Ubuntu10.04中配置的,首先,在虚拟机中安装Ubuntu,安装成功后,安装svn打开“终端”,在“终端”中输入:
$sudo apt-get install subversion
这样SVN就完成了。
2.2 建立自己的repo
我准备把版本库建立在/home目录下,首先,在/home目录下新建一个svnroot的目录,在终端中执行:
$ sudo mkdir svnroot
这样就创建了svnroot目录,然后在svnroot下创建repository目录:
$ sudo mkdir repository
然后就可以创建名为test的版本库,在终端中运行:
$ cd /home/svnroot/repository
$ sudo svnadmin create test
若创建成功,则Subversion的安装便成功完成。
在此,我们可以为版本库通过—fs-type参数明确的指定文件系统类型,可选的值包括fsfs和bdb。缺省值采用fsfs的数据存储形式。如果想要使用bdb作为数据格式,则:
$ sudo svnadmin create --fs-type bdb \test
2.3 导入源代码
现在,我们有一个可用的版本库了,接下来:
$ sudo mkdir -p import/(trunk,branches,tags)
在/home/svnroot目录下创建import目录,它包含trunk,branches,tags三个子目录。
$ sudo import /home/svnroot/import/ file:///home/svnroot/repository/test -m "Init repository"
通过这条语句将/home/svnroot/import下的目录和文件导入到刚创建的Subversion版本库中,提交后的revision为1。这里,/home/svnroot/import可以使用相对路径,但是file:///home/svnroot/repository/test必须是绝对路径。”-m”是这一版本的注解。
2.4 建立working copy
此后,如果在本地电脑上想checkout刚才建立的repo,只需在任何路径下输入:
$ svn checkout file:///home/svnroot/repository/test working-copy
完成一个working copy的建立。Windows用户需要把路径格式换成file:///X:/path/to/repo。其中X:为repo的盘符。
在wc建立后,我们就可以在里面做任意的修改,如果不满意可以直接用svnrevert恢复,在适当时候就可以将其提交到repo中去。这样就产生了新的版本。
3、用svnserve搭建Subversion服务器
上面介绍了本机上建立repo自用,但如果想把repo放在网络上供其他用户checkout,则还需要架设svn服务器。
设定用户的验证和相应的权限
首先进入到conf目录,并打开svnserve.conf文件。
$ cd /home/svnroot/repository/test/conf/
$ sudo vi svnserve.conf
找到以下几行,并把它们之前的“#”去掉,注意,每一行前的空格也同时去掉,否则会出错。
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
其中anon-access和auth-access分别是匿名和授权用户的权限,默认匿名用户为只读权限,我们将其修改为“none”,拒绝匿名用户的访问。Password-db后的passwd则为定义用户名和密码的文件路径,这个默认与svnserve.conf在同一目录。
anon-access = none
下面配置passwd中内容:
$ sudo vi passwd
在passwd文件的最后增加一行:
[users]
# harry = harrysseret
# sally = sallyssecret
testsvn=test
这样就给testsvn用户忘repo中些权限。
下面配置authz中的内容:
$vi authz
在[groups]下添加,修改内容如下:
它表示群组中的成员对仓库的各个目录的访问权限。
在命令行中运行:
$ killall svnserver;svnserve -d -r /home/svnroot/repository/
这样就启动了svnserve,接下来我们就可以用svn checkout svn://IP/test来创建一个working copy,我们可以在其中做任意修改。
4、用Apache搭建Subversion服务器
4.1准备工作
首先确定Apache正确安装,mod_dav和mod_dav_svn这两个模块也被启动。
$ sudo apt-get install apache2
$sudo apt-get install libapache2-svn
确定mod_dav和mod_dav_svn被打开:
$aemnmod dav dav-svn
4.2修改版本库所有者
目前,Repository目录依然为root用户所有,为了让用户能够通过Apache正常读写该目录,我们需要将该目录以及该目录的上层目录svnroot的所有权交给Apache httpd。
进入/home目录,修改svn仓库的所有者:
$ sudo chown -R www-data:www-data svnroot
4.3生成身份认证文件
身份认证文件保存用户的用户名和密码,用于确定用户身份。
身份认证文件放在/home/svnroot/repository下,文件名为pwdfile。
$ sudo htpasswd -c /home/svnroot/repository/pwdfile first-user
然后输入密码,第一次添加用户时需要加“-c”,之后就不要加了,否则会替换原先的加入的。
$ sudo htpasswd -c /home/svnroot/repository/pwdfile second-user
pwdfile文件的内容如下:
最后将pwdfile文件的所有者改为www-data。
4.4创建授权文件
授权文件用于确定每个用户对特定目录的操作权限,格式参考版本库下的conf/authz。我们把conf下的authz文件复制到/home/svnroot/reporsitory目录下,然后加以修改。
转到repository目录下,修改authz文件:
$sudo vi authz
Authz文件修改后的内容如下:
将authz文件的所有者改为www-data。
4.5修改Apache配置文件
执行:
$ sudo vi /etc/apache2/mods-available/dav_svn.conf
修改dav_svn文件中的内容,如下:
最后重启Apache,打开浏览器访问http://IP/svn/test,输入合法的用户名和密码便可以访问版本库了。
$ sudo /etc/init.d/apache2 restart