前言 {#前言}
本篇讲解如何在 Linux 服务器 CentOS 7 搭建 SVN 服务端,创建 SVN 仓库项目,添加项目成员以及配置用户权限。
我们将使用 svnserve 提供 svn 服务(另外还有 apache搭建SVN 方式)使用svnadmin
创建仓库;
服务器上安装 Subversion {#服务器上安装-Subversion}
首先我们要安装 SVN 的服务端,Apache Subversion
提供了服务端和客户端。
如果你还没安装好 Subversion 请查看 SVN服务端安装教程
创建 SVN 仓库 {#创建-SVN-仓库}
为确保你已正确安装好 SVN ,请在命令行输入 svnadmin help
,如果看到如下内容,说明是没问题的
|------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| # svnadmin help general usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...] Subversion repository administration tool. Type 'svnadmin help <subcommand>' for help on a specific subcommand. Type 'svnadmin --version' to see the program version and FS modules. Available subcommands: crashtest create delrevprop deltify dump dump-revprops freeze help (?, h) hotcopy info list-dblogs list-unused-dblogs load load-revprops lock lslocks lstxns pack recover rmlocks rmtxns setlog setrevprop setuuid unlock upgrade verify
|
svnadmin
是一个服务端的 SVN 管理工具,我们可以用它来创建仓库。
我们的仓库通常都会有很多个,所以我们创建一个目录来存放,假设我以/root/repos/
作为我的仓库父目录,执行下面的命令:
|---------------|-------------------------------------|
| 1 2 3
| cd /root # 创建目录 mkdir repos
|
接下来我们创建一个仓库test
|-----------------------|---------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7
| # 先进去repos目录 cd repos # 创建仓库test svnadmin create test # 进入仓库查看文件列表 cd test ls
|
输出如下,表示创建成功,
几个关键目录介绍下
conf
目录是存放配置文件的,配置用户权限,用户账号密码,svnserve配置都在这里配置。
db
这里存放我们平常提交的数据文件,文件内容都是经过处理的,看不懂里面的内容
hooks
这里是存放钩子配置的,暂时不用管这里
我们的重点是在conf
目录,里面几个配置文件如下:
authz
是权限配置文件,用来配置用户什么路径有读写权限
hooks-env.tmpl
是钩子环境变量配置文件的模版,我们暂时用不到,可以忽略
passwd
用来配置用户的帐号密码
svnserve.conf
是subversion的总配置
现在我们什么配置都不用修改先,我们先启动 svn 服务:
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7
| # 启动svn服务,-d 表示在后台运行,-r 表示仓库根目录 svnserve -d -r /root/repos/ # 查看svn进程 ps -ef | grep svn # 停止SVN服务进程 ps -aux | grep svn kill -9 进程杀掉
|
如果没报错,说明就启动成功了。
这时候我们就可以使用 SVN 客户端来检出仓库了。如果你还不会使用 SVN 客户端,可以查看下 SVN使用教程
你会发现任何人都可以检出代码,但是无法提交代码,这是因为 svn 仓库默认就是未登录用户有读取权限。
接下来我们修改配置,限制只有登录用户才能检出代码,不然太危险了。
打开test/conf/svnserve.conf
文件,替换内容如下;
|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9
| [general] # 未登录用户无权限 anon-access = none # 已登录用户有读写权限 auth-access = write # 密码配置文件 password-db = passwd # 权限配置文件 authz-db = authz
|
注意,这个文件里面有非常多的注释内容,我上面这个配置内容是简化后的,我们直接把原来的全部删除,替换为我们这个就行了。
保存配置后,不需要重启服务器,我们重新checkout
下,这时候就会弹出登录界面了,说明配置生效了。
但是我们还没有用户名密码,接下来我们设置下用户名和密码。
打开test/conf/passwd
文件,我们增加一个用户名hello,密码123456,最后内容如下:
|-----------------|------------------------------------------------------------------------------|
| 1 2 3 4
| [users] # harry = harryssecret # sally = sallyssecret hello = 123456
|
这时候我们直接去 checkout 会提示没有权限Error Authorization failed
这是因为我们配置了authz-db = authz
,这个表示用户的权限需要读取这个配置文件去判断。
如果我们去掉这个配置,则登录用户对整个仓库都有读写权限。
接下来我们给 hello 用户配置路径权限,打开test/conf/authz
文件,写入如下内容:
|------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| # 这是一个权限配置文件 # 每行配置一个权限 # 用$authenticated表示所有登录用户 # 用$anonymous表示所有未登录用户 # *号表示任何用 # 这里配置分组,把相同权限的人归为一个组,方便配置权限 [groups] # 假设我们创建一个开发人员组 # developers = zhangsan,lisi # 管理员分组 # admin = wangzong,ruhua # 配置根目录权限,管理员分组有根目录的读写权限,hello用户只有读权限 [test:/] @admin = rw hello = r # 给开发人员配置服务端源码路径的读写权限,hello有读写权限 [test:/server/src] @developers = rw hello = rw
|
把配置文件保存好,这样我们的hello用户就有了根目录/
的读权限,并且有了/server/src
的读写权限了。
另外我们还配置了几个分组,不过那些用户都是假的,需要在passwd
文件里先配置这些用户才能使用,这里只是给你演示下如何配置分组
完整的 SVN 服务端搭建和配置就完成了,日常工作中,如果项目比较多、用户多,会需要经常修改配置文件,要多注意安全,不然容易导致仓库访问不到。