Linux 搭建svn服务器

本文介绍在linux搭建自己的svn服务器。

0x00 开始

  1. 通过yum直接安装subversion

    1
    $ yum install subversion
  2. 创建版本库。版本库是一个svn用来进行版本管理的控制中心,我们将/home/svn作为我们管理所有版本库的目录,然后在其中创建一个project的版本库。

    1
    2
    $ mkdir /home/svn
    $ svnadmin create /home/svn/project
  3. 修改版本库配置。

    1
    2
    $ cd /home/svn/project && ls
    conf db format hooks locks README.txt

    创建完毕的版本库中存在conf,hooks,locks等目录和文件。

    1
    2
    $ cd conf/ && ls
    authz passwd svnserve.conf

    进入conf目录我们能看到3个配置文件:authz,passwd,svnserve.conf。authz是svn用户的权限配置文件,passwd是svn用户密码的配置文件,svnserve.conf是版本库的主配置文件。

    1
    $ vi passwd

    我们先修改passwd,在文件末尾添加一行表示添加一个用户。

    1
    2
    [users]
    sidfate = sidfate

    然后修改authz,在文件末尾添加我们刚刚创建的svn用户对根目录的权限设置,这里我们设置为rw(读写),这里的根目录指的是版本库的根目录。

    1
    2
    [/]
    sidfate = rw

    最后修改svnserve.conf,去除下面配置前的注释。

    1
    2
    3
    4
    anon-access = read
    auth-access = write
    password-db = passwd
    authz-db = authz

    这里说明一下,网上的资料有的说讲realm = My First Repository这一行也去注释,实际测试没有必要,还有如果你在客户端尝试checkout时出现权限验证的错误可以将authz-db = authz这一行注释回去就可以了。

  4. 启动和关闭svn服务。

    1
    $ svnserve –d –r /home/svn/project/

    -d指明以守护模式运行,-r指定根目录,还可以使用–listen-port=切换监听端口,默认端口为3690。关闭svn服务可以使用以下命令。

    1
    2
    3
    4
    $ 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
  5. 本地与服务器数据同步。我们现在可以在客户端环境checkout到本地,windows环境下可以使用第三方工具TortoiseSVN,操作很方便,如果是linux客户端,我们可以使用checkout命令。

    1
    $ svn checkout svn://myurl/project

    这里有一个误区,没有接触过版本控制的人可能尝试了在本地添加一个文件并上传,然后发现在服务器上找不到上传的文件。实际上版本控制记录了你的提交,你可以在本地的另一处checkout该项目发现你上传的文件已经存在了。在服务器上其实也是同一个道理,你在服务器上同样需要checkout一份代码,我们之前所作的其实就是创建了一个文件控制的中枢,你提交文件到svn服务器,然后在你的服务器上更新代码。也许你会觉得这个步骤繁琐了,别担心,我们可以使用svn的post-commit来自动同步代码的更新,来达到你本地的代码提交后服务器上的代码同步更新的功能。

    1
    2
    3
    $ cd /home/svn/project/hooks 
    $ cp post-commit.tmpl post-commit
    $ vi post-commit

    找到你版本库的hooks目录,拷贝post-commit.tmpl为post-commit,然后编辑该文件,添加以下内容。

    1
    2
    3
    REPOS="$1"
    REV="$2"
    cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate

    注意第三条语句,/home/wwwroot/project/就是我放在服务器上的代码目录,这里的操作就是每次有svn提交后进入该目录然后更新代码。还要注意的是,请给予post-commit足够的权限,不然提交的时候会提示该文件出错。

    1
    $ chmod 770 post-commit

    仍然需要注意的一个问题是如果你的svn目录中存在中文命名的文件,那么可能会出现以下类似的错误:

    1
    svn: Error converting entry in directory '.' to UTF-8

    这个时候你需要在之前编写的post-commit文件里的命令前加上一段设置编码。

    1
    export LANG=en_US.UTF-8 && cd /home/wwwroot/project/ && /usr/bin/svn update --username sidfate --password sidfate
0%