本篇讲解如何在 Linux 服务器 CentOS 7 搭建 SVN 服务端,创建 SVN 仓库项目,添加项目成员以及配置用户权限。我们将使用 svnserve 提供 svn 服务(另外还有 apache搭建SVN 方式)使用svnadmin创建仓库;
如果你闲搭建自己的SVN服务端以及配置比较麻烦,推荐你使用 SVNBucket,提供了可视化的操作界面,所有操作都变得非常简单
服务器上安装 Subversion首先我们要安装 SVN 的服务端,Apache Subversion 提供了服务端和客户端。如果你还没安装好 Subversion 请查看 SVN服务端安装教程
创建 SVN 仓库为确保你已正确安装好 SVN ,请在命令行输入 svnadmin help,如果看到如下内容,说明是没问题的
12345678910111213141516171819202122232425262728293031323334# svnadmin helpgeneral usage: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]Subversion repository administration tool.Type 'svnadmin help
svnadmin是一个服务端的 SVN 管理工具,我们可以用它来创建仓库。我们的仓库通常都会有很多个,所以我们创建一个目录来存放,假设我以/root/repos/作为我的仓库父目录,执行下面的命令:
123cd /root# 创建目录mkdir repos
接下来我们创建一个仓库test
1234567# 先进去repos目录cd repos# 创建仓库testsvnadmin create test# 进入仓库查看文件列表cd testls
输出如下,表示创建成功,
几个关键目录介绍下conf目录是存放配置文件的,配置用户权限,用户账号密码,svnserve配置都在这里配置。db这里存放我们平常提交的数据文件,文件内容都是经过处理的,看不懂里面的内容hooks这里是存放钩子配置的,暂时不用管这里
我们的重点是在conf目录,里面几个配置文件如下:authz 是权限配置文件,用来配置用户什么路径有读写权限hooks-env.tmpl 是钩子环境变量配置文件的模版,我们暂时用不到,可以忽略passwd 用来配置用户的帐号密码svnserve.conf 是subversion的总配置
现在我们什么配置都不用修改先,我们先启动 svn 服务:
12# 启动svn服务,-d 表示在后台运行,-r 表示仓库根目录svnserve -d -r /root/repos/
如果没报错,说明就启动成功了。这时候我们就可以使用 SVN 客户端来检出仓库了。如果你还不会使用 SVN 客户端,可以查看下 SVN使用教程你会发现任何人都可以检出代码,但是无法提交代码,这是因为 svn 仓库默认就是未登录用户有读取权限。
接下来我们修改配置,限制只有登录用户才能检出代码,不然太危险了。
打开test/conf/svnserve.conf 文件,替换内容如下;
123456789[general]# 未登录用户无权限anon-access = none# 已登录用户有读写权限auth-access = write# 密码配置文件password-db = passwd# 权限配置文件authz-db = authz
注意,这个文件里面有非常多的注释内容,我上面这个配置内容是简化后的,我们直接把原来的全部删除,替换为我们这个就行了。保存配置后,不需要重启服务器,我们重新checkout下,这时候就会弹出登录界面了,说明配置生效了。
但是我们还没有用户名密码,接下来我们设置下用户名和密码。打开test/conf/passwd文件,我们增加一个用户名hello,密码123456,最后内容如下:
1234[users]# harry = harryssecret# sally = sallyssecrethello = 123456
这时候我们直接去 checkout 会提示没有权限Error Authorization failed这是因为我们配置了authz-db = authz,这个表示用户的权限需要读取这个配置文件去判断。如果我们去掉这个配置,则登录用户对整个仓库都有读写权限。
接下来我们给 hello 用户配置路径权限,打开test/conf/authz文件,写入如下内容:
123456789101112131415161718192021222324# 这是一个权限配置文件# 每行配置一个权限# 用$authenticated表示所有登录用户# 用$anonymous表示所有未登录用户# *号表示任何用# 这里配置分组,把相同权限的人归为一个组,方便配置权限[groups]# 假设我们创建一个开发人员组# developers = zhangsan,lisi# 管理员分组# admin = wangzong,ruhua# 配置根目录权限,管理员分组有根目录的读写权限,hello用户只有读权限[test:/]@admin = rwhello = r# 给开发人员配置服务端源码路径的读写权限,hello有读写权限[test:/server/src]@developers = rwhello = rw
把配置文件保存好,这样我们的hello用户就有了根目录/的读权限,并且有了/server/src的读写权限了。另外我们还配置了几个分组,不过那些用户都是假的,需要在passwd文件里先配置这些用户才能使用,这里只是给你演示下如何配置分组
好了,完整的 SVN 服务端搭建和配置就完成了,日常工作中,如果项目比较多、用户多,会需要经常修改配置文件,要多注意安全,不然容易导致仓库访问不到。你也可以选择使用 SVNBucket, 提供了可视化的配置界面,用户创建、管理,权限配置都是直接在web端操作的,方便安全。