Linux 搭建svn服务器
在linux下搭建一个专属的svn服务器。
-
通过yum直接安装subversion
$ yum install subversion
-
创建版本库。版本库是一个svn用来进行版本管理的控制中心,我们将/home/svn作为我们管理所有版本库的目录,然后在其中创建一个project的版本库。
$ mkdir /home/svn $ svnadmin create /home/svn/project
-
修改版本库配置。
$ cd /home/svn/project && ls conf db format hooks locks README.txt
创建完毕的版本库中存在conf,hooks,locks等目录和文件。
$ cd conf/ && ls authz passwd svnserve.conf
进入conf目录我们能看到3个配置文件:authz,passwd,svnserve.conf。authz是svn用户的权限配置文件,passwd是svn用户密码的配置文件,svnserve.conf是版本库的主配置文件。
$ vi passwd
我们先修改passwd,在文件末尾添加一行表示添加一个用户。
[users] sidfate = sidfate
然后修改authz,在文件末尾添加我们刚刚创建的svn用户对根目录的权限设置,这里我们设置为rw(读写),这里的根目录指的是版本库的根目录。
[/] sidfate = rw
最后修改svnserve.conf,去除下面配置前的注释。
anon-access = read auth-access = write password-db = passwd authz-db = authz
这里说明一下,网上的资料有的说讲
realm = My First Repository
这一行也去注释,实际测试没有必要,还有如果你在客户端尝试checkout时出现权限验证的错误可以将authz-db = authz
这一行注释回去就可以了。 -
启动和关闭svn服务。
$ svnserve –d –r /home/svn/project/
-d指明以守护模式运行,-r指定根目录,还可以使用–listen-port=切换监听端口,默认端口为3690。关闭svn服务可以使用以下命令。
```shell
$ ps -ef | grep svnserve
root 1452 871 0 15:44 pts/0 00:00:00 grep svnserve
root 29508 1 0 Jan20 ? 00:00:00 svnserve -d -r /home/svn/project/
$ kill 29508
```
-
本地与服务器数据同步。我们现在可以在客户端环境checkout到本地,windows环境下可以使用第三方工具TortoiseSVN,操作很方便,如果是linux客户端,我们可以使用checkout命令。
$ svn checkout svn://myurl/project
这里有一个误区,没有接触过版本控制的人可能尝试了在本地添加一个文件并上传,然后发现在服务器上找不到上传的文件。实际上版本控制记录了你的提交,你可以在本地的另一处checkout该项目发现你上传的文件已经存在了。在服务器上其实也是同一个道理,你在服务器上同样需要checkout一份代码,我们之前所作的其实就是创建了一个文件控制的中枢,你提交文件到svn服务器,然后在你的服务器上更新代码。也许你会觉得这个步骤繁琐了,别担心,我们可以使用svn的post-commit来自动同步代码的更新,来达到你本地的代码提交后服务器上的代码同步更新的功能。
$ cd /home/svn/project/hooks $ cp post-commit.tmpl post-commit $ vi post-commit
找到你版本库的hooks目录,拷贝post-commit.tmpl为post-commit,然后编辑该文件,添加以下内容。
REPOS="$1" REV="$2" cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate
注意第三条语句,/home/wwwroot/project/就是我放在服务器上的代码目录,这里的操作就是每次有svn提交后进入该目录然后更新代码。还要注意的是,请给予post-commit足够的权限,不然提交的时候会提示该文件出错。
$ chmod 770 post-commit
仍然需要注意的一个问题是如果你的svn目录中存在中文命名的文件,那么可能会出现以下类似的错误:
svn: Error converting entry in directory '.' to UTF-8
这个时候你需要在之前编写的post-commit文件里的命令前加上一段设置编码。
export LANG=en_US.UTF-8 && cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate