SVN服务器安装与配置
[SVN 安装](SVN 安装 | 菜鸟教程 (runoob.com))
一、安装
详见教程:https://www.runoob.com/svn/svn-install.html
二、创建版本库
-
新建一个目录用于存储SVN所有文件
# mkdir /home/svn
-
新建一个版本仓库
# svnadmin create /home/svn/project
-
初始化版本仓库中的目录
# mkdir project project/server project/client project/test (建立临时目录) # svn import project/ file:///home/svn/project -m "初始化SVN目录" # rm -rf project (删除临时建立的目录) # sudo chmod -R 777 /home/svn/project # sudo chmod -R 777 project
-
配置文件 svnserve.conf
svn 服务配置文件为版本库目录中的文件 conf/svnserve.conf。该文件仅由一个 [general] 配置段组成。
[general] anon-access = none auth-access = write password-db = /home/svn/project/conf/passwd authz-db = /home/svn/project/conf/authz realm = tiku
- anon-access: 控制非鉴权用户访问版本库的权限,取值范围为 "write"、"read" 和 "none"。 即 "write" 为可读可写,"read" 为只读,"none" 表示无访问权限,默认值:read。
- auth-access: 控制鉴权用户访问版本库的权限。取值范围为 "write"、"read" 和 "none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限,默认值:write。
- authz-db: 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径,默认值:authz。
- realm: 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。默认值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
-
用户名口令文件 passwd
用户名口令文件由 svnserve.conf 的配置项 password-db 指定,默认为 conf 目录中的 passwd。该文件仅由一个 [users] 配置段组成。
[users] 配置段的配置行格式如下:
<用户名> = <口令> [users] admin = admin thinker = 123456
-
用户名口令文件 passwd
用户名口令文件由 svnserve.conf 的配置项 password-db 指定,默认为 conf 目录中的 passwd。该文件仅由一个 [users] 配置段组成。
[users] 配置段的配置行格式如下:
<用户名> = <口令>
[users] # harry = harryssecret # sally = sallyssecret pm = pm_pw server_group = server_pw client_group = client_pw test_group = test_pw
-
权限配置文件
-
权限配置文件由 svnserve.conf 的配置项 authz-db 指定,默认为 conf 目录中的 authz。该配置文件由一个 [groups] 配置段和若干个版本库路径权限段组成。
[groups]配置段中配置行格式如下:
<用户组> = <用户列表>
-
方式一:-r直接指定到版本库(称之为单库svnserve方式)
-
svnserve -d -r /home/svn/project
-
在这种情况下,一个svnserve只能为一个版本库工作。
-
authz配置文件中对版本库权限的配置应这样写:
-
[groups] admin=user1 dev=user2 [/] @admin=rw user2=r
-
方式二:指定到版本库的上级目录(称之为多库svnserve方式)
-
版本库路径权限段的段名格式如下:
-
[<版本库名>:<路径>] [groups] project_p = pm project_s = server_group project_c = client_group project_t = test_group [project:/] @project_p = rw * = [project:/server] @project_p = rw @project_s = rw * = [project:/client] @project_p = rw @project_c = rw * = [project:/doc] @project_p = rw @project_s = rw @project_c = rw @project_t = rw * =
-
以上信息表示,只有pm有根目录的读写权,server_group能访问server目录,client_group能访问client目录,所有人都可以访问doc目录.
-
本例是使用 svnserve -d -r /home/svn 以多库 svnserve 方式启动 SVN,所以 URL:svn://192.168.0.1/project。
-
-
测试服务器
# svn co svn://192.168.60.10/project Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d Password for 'root': Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d Username: server_group Password for 'server_group': svn: Authorization failed ( server_group没用根目录的访问权 ) # svn co svn://192.168.60.10/project Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d Password for 'root': Authentication realm: <svn://192.168.60.10:3690> 92731041-2dae-4c23-97fd-9e1ed7f0d18d Username: pm Password for 'pm': A project/test A project/server A project/client Checked out revision 1. ( 测试提取成功 ) # cd project/server # vim main.c # svn add main.c # svn commit main.c -m "测试一下我的C程序,看什么看,不行啊??" Adding main.c Transmitting file data . Committed revision 2. ( 测试提交成功 )
三、其他命令
命令 | 说明 |
---|---|
netstat -nltp|grep 3690 | 查看3690的进程号 |
svn checkout svn://192.168.1.150/data_repo --username=zhg --password=123 | 用zhg账号检出项目 |
svnserve -d -r /home/svn --log-file /home/svn/data_repo_log/svn.log | 启动svn并将日志保存到文件中 |