首页 > 操作系统 >FreeBSD创建SVN仓库步骤

FreeBSD创建SVN仓库步骤

来源:互联网 2026-07-31 17:03:02

搭建SVN服务器这事儿,说难不难,说简单吧,配置里还真有几个容易翻车的坑。今天就把完整步骤和关键细节捋一遍,顺便把那些容易栽跟头的地方重点圈出来。 第一步:创建仓库 先用命令创建一个存放代码的目录,比如我打算把仓库放在 /home/svn/reins: svnadmin create /home/s

搭建SVN服务器这事儿,说难不难,说简单吧,配置里还真有几个容易翻车的坑。今天就把完整步骤和关键细节捋一遍,顺便把那些容易栽跟头的地方重点圈出来。

第一步:创建仓库

先用命令创建一个存放代码的目录,比如我打算把仓库放在 /home/svn/reins

长期稳定更新的攒劲资源: >>>点此立即查看<<<

svnadmin create /home/svn/reins

创建完之后,记得顺手改一下文件所有者,否则后面服务跑起来可能权限不够:

chown -R svn:svn /home/svn/reins

这一步没什么花样,但容易忘记改权限,习惯性写好。

第二步:修改三个关键的配置文件

仓库创建好之后,真正的重头戏在配置上。SVN的所有用户、权限、服务参数都集中在仓库目录下的 conf/ 文件夹里,三个文件分别是:passwdauthzsvnserve.conf。下面一个一个说清楚。

1. passwd:定义用户和密码

这个文件最简单,直接照着例子写就行。格式就是 用户名 = 密码,注意组的概念后面再说,这里只填用户和密码:

[users]
p1_admin1 = p1_admin1
p1_d1 = p1_d1

密码在明文中,所以别拿生产环境的强口令来折腾——SVN本身设计就不考虑加密传输,这层安全得靠SSH或翻跟斗补。

2. authz:控制读写权限——这里特别容易翻车

authz 文件负责定义每个用户或组能访问哪些目录、权限是只读还是读写。配置的时候,一定要看清楚svnserve启动时 -r 参数指向的是哪个目录,因为这个参数直接决定了权限路径该怎么写。很多新手(包括我自己)就在这儿卡过——路径写错,一访问就报授权失败。

具体有两种常见情形:

情形A:单库svnserve方式(-r直接指定到版本库)
假设你的库 project1 放在 D:\svn\project1,启动命令是:

svnserve -d -r D:\svn\project1

这种情况下,svnserve只服务这一个库,URL里不需要带库名,直接 svn://192.168.0.1/ 就能访问。因此在 authz 文件里,路径就不能写成 [project1:/],而要写成 [/],因为此时根目录就是库的根目录:

[groups]
admin=user1
dev=user2

[/]
@admin=rw
@doc=r

如果你写成 [project1:/],系统会认为你要访问一个叫 project1 的库,但当前服务根本没有“库”这个概念,所以直接报错。这点务必注意。

情形B:多库svnserve方式(-r指定到版本库的上级目录)
还是 project1,但假设它的上级是 D:\svn,启动命令:

svnserve -d -r D:\svn

这时候一个svnserve可以服务多个库(比如 project1project2),URL需要带上库名,例如 svn://192.168.0.1/project1。权限路径就要明确指定是哪个库的哪个目录:

[groups]
admin=user1
dev=user2

[project1:/]
@admin=rw
@doc=r

如果这时候你仍然用 [/],那它指的是所有库的根目录(也就是对所有库生效),可能不是你想要的。同理,[/src] 表示所有库根目录下的 src 目录。所以启动参数不同,authz里的写法天差地别,一定要先确定自己的启动方式再写。

3. svnserve.conf:服务主配置

这个文件里有一堆注释,需要你手动打开需要的选项。关键几点:

  • 去掉 [general] 前面的#号(注意,去掉后要顶格写,不能有空格,否则可能会报错)
  • 匿名访问权限:一般设为 none,防止不认证就能读取
  • 认证用户权限:设为 write
  • 密码文件路径:指定 passwd
  • 授权文件路径:指定 authz

一个典型的配置长这样:

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

注意,password-dbauthz-db 默认是相对路径,指向conf目录下的文件。如果你改了文件位置,需要写绝对路径。

第三步:启动SVN服务

假设你的仓库在 /home/svn/ 下(注意不是仓库本身,是上级目录,如果你想用多库方式的话),启动命令:

svnserve -d -r /home/svn/

-d 表示后台运行,-r 指定根目录。如果提示已经有svnserve进程在跑,可以用 killall svnserve 杀掉再重来。

这里也呼应前面的authz配置:如果你用的是多库方式,那么 -r 指向仓库的上级,authz里就要用 [库名:/];如果你只想启动单个库,可以直接 svnserve -d -r /home/svn/reins,authz里就写 [/]。总之这两边要匹配。

第四步:客户端访问

服务跑起来之后,客户端(比如TortoiseSVN)就能用地址 svn://172.31.12.38/reins 来checkout了。注意URL中的 reins 对应的是仓库名,前提是你启动时 -r 指定的是仓库的上级目录(多库方式)。如果你启动时直接指向了仓库本身,那URL就是 svn://172.31.12.38/,不带库名。

整体流程其实不复杂,但authz里的路径写法确实容易搞反。建议先在本地用小仓库测试一遍,确认权限生效了再上生产环境。另外,如果遇到 认证失败授权失败 的错误,先检查svnserve.conf里的配置项有没有顶格写,再检查authz里的路径是否匹配启动参数。这两个是最常见的雷区。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。