Linux:Subversion服务端安装及配置

Linux:Subversion服务端安装及配置

环境:

CentOS 7

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# which svn
/usr/bin/which: no svn in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@localhost ~]# yum -y install subversion
Loaded plugins: fastestmirror, langpacks
……
Complete!

注:-y代表在安装过程中遇到的询问都键入y(yes),代表自动确认。

验证下可执行文件以及版本:

[root@localhost ~]# which svn
/usr/bin/svn
[root@localhost ~]# which svnserve
/usr/bin/svnserve
[root@localhost ~]# svnserve --version
svnserve, version 1.7.14 (r1542130)
   compiled Nov 20 2015, 19:25:09

Copyright (C) 2013 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 repository back-end (FS) modules are available:

* fs_base : Module for working with a Berkeley DB repository.
* fs_fs : Module for working with a plain file (FSFS) repository.

Cyrus SASL authentication is available.

接下来需要创建svn库。

首先创建一个总的svn库目录:/opt/svn

[root@localhost ~]# mkdir /opt/svn
[root@localhost ~]# ll /opt
total 0
drwxr-xr-x. 2 root root 6 Mar 26  2015 rh
drwxr-xr-x. 2 root root 6 Apr 24 04:07 svn

这样做的目的是便于管理,例如我可以有多个svn库:

/opt/svn/repo_a
/opt/svn/repo_b
/opt/svn/repo_c
……

这样所有的svn库都在一个目录下,便于管理。

现在我要创建svn库/opt/svn/myrepo:

[root@localhost ~]# svnadmin create /opt/svn/myrepo
[root@localhost ~]# cd /opt/svn
[root@localhost svn]# ll
total 0
drwxr-xr-x. 6 root root 80 Apr 24 04:12 myrepo
[root@localhost svn]# ll myrepo/
total 16
drwxr-xr-x. 2 root root   51 Apr 24 04:12 conf
drwxr-sr-x. 6 root root 4096 Apr 24 04:12 db
-r--r--r--. 1 root root    2 Apr 24 04:12 format
drwxr-xr-x. 2 root root 4096 Apr 24 04:12 hooks
drwxr-xr-x. 2 root root   39 Apr 24 04:12 locks
-rw-r--r--. 1 root root  229 Apr 24 04:12 README.txt

我们只介绍简单的配置,所以仅仅关注conf下的内容:

[root@localhost svn]# cd /opt/svn/myrepo/conf/
[root@localhost conf]# pwd
/opt/svn/myrepo/conf
[root@localhost conf]# ll
total 12
-rw-r--r--. 1 root root 1080 Apr 24 04:12 authz
-rw-r--r--. 1 root root  309 Apr 24 04:12 passwd
-rw-r--r--. 1 root root 3090 Apr 24 04:12 svnserve.conf

注意svnserve.conf文件中的几个地方:

# anon-access = read
# auth-access = write

anon-access代表匿名模式下具有的权限;
auth-access代表鉴权模式下具有的权限;

# password-db = passwd
# authz-db = authz

password-db代表密码文件所在位置(鉴权时,输入用户名和密码,去哪里匹配呢?就是这里啦);
authz-db代表权限文件所在位置。

注意:你可以修改以上的值,但是需要去掉开头的#以及空格键,否则会出问题~

启动svnserve服务:

[root@localhost ~]# svnserve -d -r /opt/svn

-d是daemon:

Causes svnserve to run in daemon mode. svnserve backgrounds itself and accepts and serves TCP/IP connections on the svn port (3690, by default).

-d使svnserve运行在后台,接收tcp/ip连接,默认端口是3690。

-r是root:

Sets the virtual root for repositories served by svnserve.
The pathname in URLs provided by the client will be interpreted relative to this root, and will not be allowed to escape this root.

-r其实就是指明了svnserve启动的虚拟目录(根目录)。

现在我们指明了/opt/svn是我们的虚拟目录。

服务器相关信息:

[root@localhost ~]# ps -ef | grep svn
root       4041      1  0 04:53 ?        00:00:00 svnserve -d -r /opt/svn
root       4043   2809  0 04:53 pts/0    00:00:00 grep --color=auto svn
[root@localhost ~]# netstat -anp | grep svn
tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN      4041/svnserve

由最后一个可以看出,svnserve监听的是3690,pid是4041。

服务器ip信息:

[root@localhost ~]# ifconfig
eno16777736: flags=4163  mtu 1500
        inet 192.168.44.129  netmask 255.255.255.0  broadcast 192.168.44.255
        inet6 fe80::20c:29ff:fe14:f94  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:14:0f:94  txqueuelen 1000  (Ethernet)
        RX packets 17002  bytes 14563828 (13.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10521  bytes 1092373 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
……

我的windows上装有svn客户端,可以测试下:

Linux:Subversion服务端安装及配置_第1张图片

Linux:Subversion服务端安装及配置_第2张图片

OK,已经成功checkout了。

注意:我的环境是CentOS 7,默认是使用firewall作为防火墙,我直接把防火墙关闭了:

[root@localhost conf]# systemctl stop firewalld.service
[root@localhost conf]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@localhost conf]# firewall-cmd --state
not running

实际中你可以选用iptables,然后在其配置文件中添加对应的端口对外部进行开放。

Other:

【1】

看看conf目录下svnserve.conf中的anon-access有啥作用。

将anon-access去掉前面的#以及空格,改为:

anon-access = none

保存退出。(不必重新启动服务,进程运行期间刷新配置)

然后在win下co看看:

Linux:Subversion服务端安装及配置_第3张图片

很明显是没有权限。

再修改回去(其实就是加个#注释掉):

#anon-access = none

保存退出。

重新co下:

Linux:Subversion服务端安装及配置_第4张图片

co成功。

【2】

使用listen-port选项修改svnserve监听端口。

[root@localhost ~]# svnserve -d -r /opt/svn --listen-port 12500
[root@localhost ~]# ps -ef | grep svn
root       4695      1  0 05:42 ?        00:00:00 svnserve -d -r /opt/svn --listen-port 12500
root       4697   2809  0 05:43 pts/0    00:00:00 grep --color=auto svn
[root@localhost ~]# netstat -anp | grep svn
tcp        0      0 0.0.0.0:12500           0.0.0.0:*               LISTEN      4695/svnserve

现在监听的是12500,pid是4695。

在win上使用svn客户端co下:

Linux:Subversion服务端安装及配置_第5张图片

Linux:Subversion服务端安装及配置_第6张图片

注意加上对应的端口。

【3】

这一点是我在实际操作中遇到的问题:

搭建好svn服务端后,我设置的:

#anon-access = none
#auth-access = write
#password-db = passwd
#authz-db = authz

可以直接co成功。

当把anon-access取消注释,则直接co失败。

为啥不提示输入用户名和密码呢?

可以将password-db注释取消掉,这个时候再co就会看到提示输入用户名和密码了:

anon-access = none
#auth-access = write
password-db = passwd
#authz-db = authz

再进行co时可以看到:

Linux:Subversion服务端安装及配置_第7张图片

输入在conf/passwd中设置的用户名及密码即可。

总结来说:

当anon-access被注释掉时,直接co一般都是成功的,因为默认具有read权限;

当anon-access取消注释后,若其值为none,且password-db被注释,则直接Access Denied;

当anon-access取消注释后,若其值为none,且password-db未被注释,则弹出对话框可以输入信息进行鉴权。

【4】

添加svn账户。

修改conf中passwd文件。

假设我要添加的用户名和密码是test1280/1qaz@WSX,可以修改如下:

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret

test1280 = 1qaz@WSX

如果有多个,那就写在多行即可。

【5】

假设我想要test1280这个用户对当前svn库拥有读写权限,我可以设置conf/authz如下:

### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###  - a single user,
###  - a group of users defined in a special [groups] section,
###  - an alias defined in a special [aliases] section,
###  - all authenticated users, using the '$authenticated' token,
###  - only anonymous users, using the '$anonymous' token,
###  - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[/]
test1280 = rw

有用的就是最后两行。

可以设置组的权限,可以设置某个用户对某个路径的权限等等。

我也并没有一一尝试,但是如果想要学习好,自己动手吧,自己实验吧~

【6】

如何清除svn客户端缓存的鉴权信息(用户名及密码)。

Linux下删除:

rm ~/.subversion/auth/svn.simple/*

Win下:

Linux:Subversion服务端安装及配置_第8张图片

Linux:Subversion服务端安装及配置_第9张图片

【7】

对于-r的理解。

-r指明了一个虚拟的根目录,在客户端进行co时,指出的位置都是相对于这个根目录。

例如:svn://192.168.44.129:12500/myrepo中,12500后的“/”指的是:

这里写图片描述

即/opt/svn这个目录,然后是myrepo,那么拼起来就是:

/opt/svn/myrepo啦!

如果有多个svnserve服务器,可以设置多个svn虚拟根目录,一个svnserve进程对应一个svn虚拟根目录,当然,每个进程监听的端口是不一样的。

【8】

对authz中[/]的理解

后续补充。

【9】

举个例子:

需求:

两个svnserve服务器,监听不同端口;

一个svnserve的虚拟根目录是/opt/svn1,另外一个是/opt/svn2;

svn1中有一个叫做svn_test1280的svn库;

svn2中有两个svn库,分别是svn_test1281,svn_test1282;

对svn2中的svn库设置不同的访问权限。

后续补充。

总结:

1.鉴权是相对于某一个svn库进行的,所有鉴权信息都是被某个svn库所持有的;

2.一个svnserve进程对应一个虚拟根目录,对应一个监听端口;

参考资料:

1.http://www.cnblogs.com/puloieswind/p/5856326.html

2.http://www.cnblogs.com/chaichuan/p/3758173.html

3.http://www.cnblogs.com/dreamowneryong/p/5627860.html


2017/04/28

之前我写的有些问题,现做一些修改。

下面是建立一个SVN库的过程。

CentOS 7:

[svn@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[svn@localhost ~]$ pwd
/home/svn
[svn@localhost ~]$ ll
total 0
[svn@localhost ~]$ svnadmin create myrepo
[svn@localhost ~]$ ll
total 0
drwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepo
[svn@localhost ~]$ ll myrepo/
total 16
drwxrwxr-x. 2 svn svn   51 Apr 28 01:01 conf
drwxrwsr-x. 6 svn svn 4096 Apr 28 01:01 db
-r--r--r--. 1 svn svn    2 Apr 28 01:01 format
drwxrwxr-x. 2 svn svn 4096 Apr 28 01:01 hooks
drwxrwxr-x. 2 svn svn   39 Apr 28 01:01 locks
-rw-rw-r--. 1 svn svn  229 Apr 28 01:01 README.txt
[svn@localhost ~]$ ll myrepo/conf/
total 12
-rw-rw-r--. 1 svn svn 1080 Apr 28 01:01 authz
-rw-rw-r--. 1 svn svn  309 Apr 28 01:01 passwd
-rw-rw-r--. 1 svn svn 3090 Apr 28 01:01 svnserve.conf

修改conf下三个文件:

1.修改svnserve.conf,取消五处注释

anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = My First Repository

2.修改passed文件,增加用户

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret

test1280 = 1qaz2wsx

3.修改authz文件,创建权限

[/]
test1280 = rw
[svn@localhost ~]$ svnserve -d -r myrepo
[svn@localhost ~]$ ps -ef | grep svn
root      10493  10308  0 00:41 pts/0    00:00:00 su - svn
svn       10494  10493  0 00:41 pts/0    00:00:00 -bash
svn       10963      1  0 01:06 ?        00:00:00 svnserve -d -r myrepo
svn       10964  10494  0 01:06 pts/0    00:00:00 ps -ef
svn       10965  10494  0 01:06 pts/0    00:00:00 grep --color=auto svn

可以看到已经启动了。

[svn@localhost ~]$ mkdir tmp
[svn@localhost ~]$ ll
total 0
drwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepo
drwxrwxr-x. 2 svn svn  6 Apr 28 01:06 tmp
[svn@localhost ~]$ cd tmp
[svn@localhost tmp]$ svn co svn://127.0.0.1/myrepo
……
svn: E170000: URL 'svn://127.0.0.1/myrepo' doesn't exist

关键在于:

svn: E170000: URL ‘svn://127.0.0.1/myrepo’ doesn’t exist

不存在。

其实我们应该仔细理解/的含义。

首先,在启动svnserve服务时,有指定虚拟根目录,我们指定的是/home/svn/myrepo。

需要注意,一个svn://ip:port/是与一个虚拟根目录对应的,port后面的/即这里的/home/svn/myrepo,这一点与网站很类似。搭建Apache Tomcat时,不也是这样吗?

很明显我们此处url有问题:svn://127.0.0.1/myrepo,正确的是:’svn://127.0.0.1/。

再想一想,authz中的/是什么意思?

是某个用户对根目录的权限,即最大的权限。

结合这里来看,如果我们仅仅有一个项目,完全可以把它放置在根目录下,然后给不同的用户不同的权限。

假设我有一个项目cJson,可以这么做:

先svn co下空的目录(在cJsonProj目录中),主要是要.svn这个东西,然后把相关的代码什么拷贝进去。

[svn@localhost ~]$ ll
total 0
drwxrwxr-x. 4 svn svn 97 Apr 28 01:21 cJsonProj
drwxrwxr-x. 6 svn svn 80 Apr 28 01:01 myrepo
[svn@localhost ~]$ ll -a cJsonProj/
total 64
drwxrwxr-x. 4 svn svn    97 Apr 28 01:21 .
drwx------. 8 svn svn  4096 Apr 28 01:18 ..
-rw-r--r--. 1 svn svn 27791 Feb 13  2015 cJSON.c
-rw-r--r--. 1 svn svn  7526 Feb 13  2015 cJSON.h
-rw-r--r--. 1 svn svn  1091 Aug 14  2013 LICENSE
-rw-rw----. 1 svn svn  8751 Oct 28  2009 README
drwxrwxr-x. 4 svn svn    70 Apr 28 01:21 .svn
-rw-r--r--. 1 svn svn  6702 Feb 13  2015 test.c
drwxr-xr-x. 2 svn svn    66 Feb 13  2015 tests
[svn@localhost cJsonProj]$ pwd
/home/svn/cJsonProj
[svn@localhost cJsonProj]$ ll
total 60
-rw-r--r--. 1 svn svn 27791 Feb 13  2015 cJSON.c
-rw-r--r--. 1 svn svn  7526 Feb 13  2015 cJSON.h
-rw-r--r--. 1 svn svn  1091 Aug 14  2013 LICENSE
-rw-rw----. 1 svn svn  8751 Oct 28  2009 README
-rw-r--r--. 1 svn svn  6702 Feb 13  2015 test.c
drwxr-xr-x. 2 svn svn    66 Feb 13  2015 tests
[svn@localhost cJsonProj]$ svn add cJSON.c
A         cJSON.c
[svn@localhost cJsonProj]$ svn add cJSON.c
A         cJSON.c
[svn@localhost cJsonProj]$ scn add cJSON.h
bash: scn: command not found...
[svn@localhost cJsonProj]$ svn add cJSON.h
A         cJSON.h
[svn@localhost cJsonProj]$ svn add LICENSE
A         LICENSE
[svn@localhost cJsonProj]$ svn add README
A         README
[svn@localhost cJsonProj]$ svn add test.c 
A         test.c
[svn@localhost cJsonProj]$ svn add tests
A         tests
A         tests/test1
A         tests/test2
A         tests/test3
A         tests/test4
A         tests/test5
[svn@localhost cJsonProj]$ svn ci -m "add cJSON to SVN"
Adding         LICENSE
Adding         README
Adding         cJSON.c
Adding         cJSON.h
Adding         test.c
Adding         tests
Adding         tests/test1
Adding         tests/test2
Adding         tests/test3
Adding         tests/test4
Adding         tests/test5
Transmitting file data ..........
Committed revision 1.

这样一个简单的只有一个项目,放置在虚拟根目录的情形,就基本完成了。

svn://127.0.0.1/* 就是各个项目文件或目录。

当然,上述的并不标准,应该分出branch/tags/trunk等等。

我们公司有很多的项目,但是共用同一个svn服务器 ,那有该如何处理?

可以这样:

建立一个svn目录,作为虚拟根目录,然后在下面建立很多的子目录,作为不同项目的根目录,赋予不同项目组用户权限时,可以给予不同的路径权限。

假设:

我要搭建一个svn服务器,上面有很多项目,其中一个是cJSON,一个是Tomcat,有两个用户,一个是负责cJSON的,一个是负责Tomcat,分别对自己的项目拥有全部权限。

如下过程:

[svn@localhost ~]$ svnadmin create myrepo
[svn@localhost ~]$ ll
total 0
drwxrwxr-x. 6 svn svn 80 Apr 28 01:30 myrepo
[svn@localhost ~]$ ll myrepo/
total 16
drwxrwxr-x. 2 svn svn   51 Apr 28 01:30 conf
drwxrwsr-x. 6 svn svn 4096 Apr 28 01:30 db
-r--r--r--. 1 svn svn    2 Apr 28 01:30 format
drwxrwxr-x. 2 svn svn 4096 Apr 28 01:30 hooks
drwxrwxr-x. 2 svn svn   39 Apr 28 01:30 locks
-rw-rw-r--. 1 svn svn  229 Apr 28 01:30 README.txt
[svn@localhost ~]$ ll myrepo/conf/
total 12
-rw-rw-r--. 1 svn svn 1080 Apr 28 01:30 authz
-rw-rw-r--. 1 svn svn  309 Apr 28 01:30 passwd
-rw-rw-r--. 1 svn svn 3090 Apr 28 01:30 svnserve.conf

修改conf下三个文件:

1.svnserve.conf同上。

2.修改passwd文件:

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
myadmin = pass_admin
test1280 = pass_1280
test1281 = pass_1281

test280负责cJSON,test1281负责Tomcat。

3.修改authz文件:

[/]
myadmin = rw

[/cJSON]
test1280 = rw

[/Tomcat]
test1281 = rw
[svn@localhost ~]$ svnserve -d -r myrepo
[svn@localhost ~]$ ps -ef | grep svn
root      10493  10308  0 00:41 pts/0    00:00:00 su - svn
svn       10494  10493  0 00:41 pts/0    00:00:00 -bash
svn       11471      1  0 01:36 ?        00:00:00 svnserve -d -r myrepo
svn       11472  10494  0 01:36 pts/0    00:00:00 ps -ef
svn       11473  10494  0 01:36 pts/0    00:00:00 grep --color=auto svn

假设我们在allPros中co下虚拟根目录中全部内容:

[svn@localhost allPros]$ svn co svn://127.0.0.1/
Checked out revision 0.
[svn@localhost allPros]$ mkdir cJSON
[svn@localhost allPros]$ mkdir Tomcat
[svn@localhost allPros]$ ll
total 0
drwxrwxr-x. 2 svn svn 6 Apr 28 01:40 cJSON
drwxrwxr-x. 2 svn svn 6 Apr 28 01:40 Tomcat
[svn@localhost allPros]$ svn add cJSON
A         cJSON
[svn@localhost allPros]$ svn add Tomcat
A         Tomcat
[svn@localhost allPros]$ svn ci -m "add cJSON and Tomcat to repo"
……
Store password unencrypted (yes/no)? no
Adding         Tomcat
Adding         cJSON

Committed revision 1.

然后依次将项目放置到对应的本地项目根目录中。

[svn@localhost allPros]$ ll cJSON/
total 60
-rw-r--r--. 1 svn svn 27791 Feb 13  2015 cJSON.c
-rw-r--r--. 1 svn svn  7526 Feb 13  2015 cJSON.h
-rw-r--r--. 1 svn svn  1091 Aug 14  2013 LICENSE
-rw-rw----. 1 svn svn  8751 Oct 28  2009 README
-rw-r--r--. 1 svn svn  6702 Feb 13  2015 test.c
drwxr-xr-x. 2 svn svn    66 Feb 13  2015 tests
[svn@localhost allPros]$ ll Tomcat/
total 96
drwxr-x---. 2 svn svn  4096 Apr 28 01:55 bin
drwx------. 2 svn svn  4096 Apr 12 12:29 conf
drwxr-x---. 2 svn svn  4096 Apr 28 01:55 lib
-rw-r-----. 1 svn svn 57092 Apr 12 12:29 LICENSE
drwxr-x---. 2 svn svn     6 Apr 12 12:27 logs
-rw-r-----. 1 svn svn  1804 Apr 12 12:29 NOTICE
-rw-r-----. 1 svn svn  6709 Apr 12 12:29 RELEASE-NOTES
-rw-r-----. 1 svn svn 15946 Apr 12 12:29 RUNNING.txt
drwxr-x---. 2 svn svn    29 Apr 28 01:55 temp
drwxr-x---. 7 svn svn    76 Apr 12 12:27 webapps
drwxr-x---. 2 svn svn     6 Apr 12 12:27 work
[svn@localhost cJSON]$ svn add *
A         cJSON.c
A         cJSON.h
A         LICENSE
A         README
A         test.c
A         tests
A         tests/test5
A         tests/test1
A         tests/test2
A         tests/test3
A         tests/test4
[svn@localhost cJSON]$ svn ci -m "add cJSON to /cJSON/"
Authentication realm: 3690> My First Repository
Password for 'myadmin': 
Authentication realm: 3690> My First Repository
Username: test1280
Password for 'test1280':
……
Store password unencrypted (yes/no)? no
Adding         LICENSE
Adding         README
Adding         cJSON.c
Adding         cJSON.h
Adding         test.c
Adding         tests
Adding         tests/test1
Adding         tests/test2
Adding         tests/test3
Adding         tests/test4
Adding         tests/test5
Transmitting file data ..........
Committed revision 2.

同理,添加Tomcat:

[svn@localhost cJSON]$ cd ../Tomcat/
[svn@localhost Tomcat]$ ll
total 96
drwxr-x---. 2 svn svn  4096 Apr 28 01:55 bin
drwx------. 2 svn svn  4096 Apr 12 12:29 conf
drwxr-x---. 2 svn svn  4096 Apr 28 01:55 lib
-rw-r-----. 1 svn svn 57092 Apr 12 12:29 LICENSE
drwxr-x---. 2 svn svn     6 Apr 12 12:27 logs
-rw-r-----. 1 svn svn  1804 Apr 12 12:29 NOTICE
-rw-r-----. 1 svn svn  6709 Apr 12 12:29 RELEASE-NOTES
-rw-r-----. 1 svn svn 15946 Apr 12 12:29 RUNNING.txt
drwxr-x---. 2 svn svn    29 Apr 28 01:55 temp
drwxr-x---. 7 svn svn    76 Apr 12 12:27 webapps
drwxr-x---. 2 svn svn     6 Apr 12 12:27 work
[svn@localhost Tomcat]$ svn add *
A         bin
A  (bin)  bin/commons-daemon-native.tar.gz
A         bin/tool-wrapper.sh
A         bin/startup.bat
A         bin/setclasspath.sh
……
[svn@localhost Tomcat]$ svn ci -m "add Tomcat to /Tomcat/"
Authentication realm: 127.0.0.1:3690> My First Repository
Password for 'test1280': 
Authentication realm: 127.0.0.1:3690> My First Repository
Username: test1281
Password for 'test1281':
……
Committed revision 3.

大功告成。

[svn@localhost Tomcat]$ cd
[svn@localhost ~]$ ll
total 0
drwxrwxr-x. 5 svn svn 42 Apr 28 01:51 allPros
drwxrwxr-x. 6 svn svn 80 Apr 28 01:30 myrepo
[svn@localhost ~]$ pwd
/home/svn
[svn@localhost ~]$ cd
[svn@localhost ~]$ pwd
/home/svn
[svn@localhost ~]$ mkdir mycJSON
[svn@localhost ~]$ mkdir myTomcat
[svn@localhost ~]$ cd mycJSON
[svn@localhost mycJSON]$ svn co svn://127.0.0.1/cJSON/ --username test1281 --password pass_1281
svn: E170001: Authorization failed

可以看到test1281想要检出cJSON鉴权失败。

[svn@localhost mycJSON]$ svn co svn://127.0.0.1/cJSON/ --username test1280 --password pass_1280
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? no
A    cJSON/README
A    cJSON/cJSON.c
A    cJSON/test.c
A    cJSON/LICENSE
A    cJSON/cJSON.h
A    cJSON/tests
A    cJSON/tests/test3
A    cJSON/tests/test4
A    cJSON/tests/test5
A    cJSON/tests/test1
A    cJSON/tests/test2
Checked out revision 3.

使用test1280账户检出成功。

Tomcat同理。

注意,这里只是最简单的,实际每个项目都应该包含一些约定俗成(不是必须)的目录,例如tags、trunk等。

总结:

假设 虚拟根目录是virtual_dir,那么一般的结构是:

virtual_dir/project_a/…
virtual_dir/project_b/…

对项目组project_a的用户设置权限为/project_a,对项目组project_b的用户设置权限为/project_b。

Over!

你可能感兴趣的:(LINUX,OTHER)