2016年2月25日星期四

MAC_040:搭建本地 svn 服务器

环境:OS X EI Capitan 10.11.3 + svnserve  1.7.19 + svn 1.7.19

MAC 默认已经自带了 svn 服务器和客户端,因此不需要安装了。

1. 确认安装了 svn 服务器:svnserve
$ svnserve --version
输出如下:
svnserve, version 1.7.19 (r1643991)
   compiled Mar 10 2015, 12:33:03

Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repositories back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repositories.

2. 创建本地仓库
 (1)$ mkdir -p /Users/maping/svn/repositories/local
 (2)$ svnadmin create /Users/maping/svn/repositories/local
 (3)$ ll /Users/maping/svn/repositories/local
      -rw-r--r--   1 maping  staff  229  2 25 08:35 README.txt
      drwxr-xr-x   5 maping  staff  170  2 25 08:35 conf
      drwxr-sr-x  15 maping  staff  510  2 25 08:35 db
      -r--r--r--   1 maping  staff    2  2 25 08:35 format
      drwxr-xr-x  11 maping  staff  374  2 25 08:35 hooks
      drwxr-xr-x   4 maping  staff  136  2 25 08:35 locks

3. 配置
(1)$ vim /Users/maping/svn/repositories/local/conf/svnserve.conf
    [general]
    anon-access = none
    auth-access = write
    password-db = passwd
    authz-db = authz
    注意:
     (1)这里除了要去掉四行前面的#号外,并且要顶到行头,否则有空格,会报错。
     (2)这里必须设置 anon-access = none,否则和Jenkins集成时,会报错:svn: E220001: Item is not readable,详见参考文献 3.

(2)$ vim /Users/maping/svn/repositories/local/conf/passwd
    在[users]后面加入以下内容
    administrator = admin@svnserve
    maping = maping
    说明:这里添加了两个用户,并分别设置了密码。

(3)$ vim /Users/maping/svn/repositories/local/conf/authz
    [groups]
    admin = administrator
    user = maping
    [/]
    # * = r
    @admin = rw
    @user = r
    [local:/]
    @admin = rw
    @user = rw
    说明:
    (1)这里定义了两个组:admin 和 user
    (2)admin这个组里面有 administrator 这个用户(一个组里面可以有多个用户,多个用户用逗号隔开),user 这个组里面有 maping 这个用户。
    (3)设置根目录的权限,这里的 / 目录指的是 /Users/maping/svn/repositories/ 目录。
    (4)设置 local 这个仓库的根目录权限。

4. 启动/停止
(1)启动
     $ svnserve -d -r /Users/maping/svn/repositories
     如果写系统日志,比如/var/log/svn.log,需要root权限。
     $ sudo svnserve -d -r /Users/maping/svn/repositories --log-file=/var/log/svn.log
     svnserve 默认使用3690端口,检查起来没有
     $ netstat -an | grep 3690
 (2)停止
     $ ps -ef | grep svnserve
     $ kill SVNSERVE_PID

5. 创建默认目录结构
(1)首先在本地把目录结构建立好
    $ mkdir -p /tmp/svntemp/tags /tmp/svntemp/trunk /tmp/svntemp/branches

(2)把本地目录结构导入到 svn 仓库中
    $ svn import -m 'init repo' /tmp/svntemp/ svn://localhost/local
    输出如下:
    Authentication realm: e37f735f-9e1b-4882-a177-fa4ba113d199
    Password for 'maping':
    Authentication realm: e37f735f-9e1b-4882-a177-fa4ba113d199
    Username: maping
    Password for 'maping':
    Adding         /tmp/svntemp/tags
    Adding         /tmp/svntemp/trunk
    Adding         /tmp/svntemp/branches

    Committed revision 1.
    说明:
    (1)尽管Subversion的灵活性允许你自由布局版本库,但推荐的方式是:创建一个trunk目录来保存开发的主线,一个branches目录存放分支拷贝,tags目录保存标签拷贝。
    (2)第一个提示的 maping,是 MAC 用户的账户。后面的 maping 是 svn 中定义的账户。
 

(3)导入一个已有的 Maven 项目
    $ svn import -m "initial import" /Users/maping/Apache/maven/my-webapp/  svn://localhost/local/trunk/my-webapp
    输出如下:
    Adding         Apache/maven/my-webapp/src
    Adding         Apache/maven/my-webapp/src/main
    Adding         Apache/maven/my-webapp/src/main/resources
    Adding         Apache/maven/my-webapp/src/main/webapp
    Adding         Apache/maven/my-webapp/src/main/webapp/index.jsp
    Adding         Apache/maven/my-webapp/src/main/webapp/WEB-INF
    Adding         Apache/maven/my-webapp/src/main/webapp/WEB-INF/web.xml
    Adding         Apache/maven/my-webapp/pom.xml

    Committed revision 2.

(4)从 svn 仓库导出项目
    在导入之后,原来的目录并没有转化成工作拷贝,为了开始工作,需要运行 svn checkout 导出一个工作拷贝。
    $ svn checkout svn://localhost/local/ --username=maping --password=maping /Users/maping/mysvn
    $ svn list svn://localhost/local/
    $ svn list svn://localhost/local/trunk/my-webapp
    $ svn delete svn://localhost/local/trunk/my-webapp -m delete

参考文献:
1. http://xiayong.blog.51cto.com/6292420/1088790
2. http://www.cnblogs.com/onlyfu/archive/2012/05/08/2489814.html
3. http://www.2cto.com/os/201211/171663.html

没有评论: