Linux:Subversion服务端安装及配置

2024-03-25 17:08

本文主要是介绍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:09Copyright (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<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.44.129  netmask 255.255.255.0  broadcast 192.168.44.255inet6 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 0TX packets 10521  bytes 1092373 (1.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
……

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

这里写图片描述

这里写图片描述

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看看:

这里写图片描述

很明显是没有权限。

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

#anon-access = none

保存退出。

重新co下:

这里写图片描述

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下:

这里写图片描述

这里写图片描述

注意加上对应的端口。

【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时可以看到:

这里写图片描述

输入在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 = sallyssecrettest1280 = 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下:

这里写图片描述

这里写图片描述

【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 = sallyssecrettest1280 = 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         cJSONCommitted 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: <svn://127.0.0.1:3690> My First Repository
Password for 'myadmin': 
Authentication realm: <svn://127.0.0.1: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: <svn://127.0.0.1:3690> My First Repository
Password for 'test1280': 
Authentication realm: <svn://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:Subversion服务端安装及配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845667

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则