inferno头像
关注
SVN学习笔记(二)封面图

SVN学习笔记(二)

目录

四、配置多仓库

1. 多仓库的概念:

2. 创建多仓库的步骤:

3. 总结:

五、SVN权限控制

1. 三个配置文件作用:

2. SVN(svnserve 模式)权限配置完整步骤:

3. 配置自动启动服务:

4.创建启停服务的批处理文件:

六、钩子程序

1.钩子程序的概念:

2.钩子程序的种类:


四、配置多仓库

1. 多仓库的概念:

        SVN 一个仓库(repository)对应独立数据库,仓库之间完全隔离。

2. 创建多仓库的步骤:

(1) 规划目录结构:

        先创建一个仓库根目录(用来统一存放所有仓库)

# 创建总目录,所有仓库放在这里 
mkdir -p /svn/repos

        说明:后续所有项目仓库,都作为 /svn/repos 的子文件夹。

        

(2) 使用 svnadmin create 创建单个仓库:

        语法:svnadmin create 仓库完整路径

# 创建项目A仓库
svnadmin create /svn/repos/projectA
# 创建项目B仓库
svnadmin create /svn/repos/projectB
# 创建项目C仓库
svnadmin create /svn/repos/projectC

        执行完成后,projectA、projectB、projectC 各自独立,每个里面自动生成:conf、db、hooks、locks文件夹。

        每个仓库有独立的svnserve.conf、passwd、authz;

        每个仓库版本号独立、钩子独立;

        

(3) 启动svnserve(关键)

        启动时,-r 指定总仓库父目录 /svn/repos,而不是单个仓库。

# svnserve -d(后台运行) -r(监管目录) /svn/repos(总仓库父目录)
svnserve -d -r /svn/repos
-d后台守护进程运行。
-r指定仓库根目录,svnserve 会自动扫描该目录下所有子仓库。

(4) 访问地址:

svn://服务器IP/projectA
svn://服务器IP/projectB
svn://服务器IP/projectC

(5) 分别配置每个仓库权限:

        进入每个仓库各自的 conf 目录配置(具体权限配置方法见下一章节):

/svn/repos/projectA/conf/
/svn/repos/projectB/conf/

        每个仓库单独修改 svnserve.conf、passwd、authz,账号、权限互相独立。

3. 总结:

        实现SVN多个仓库:在svnserve根目录下创建多个独立仓库目录,每个仓库自带 conf、db、hooks;仓库之间完全隔离、版本号独立;注意区分【多个独立仓库】和【一个仓库下多个项目文件夹】,后者不是多仓库。

五、SVN权限控制

        仓库目录下 conf 文件夹包含3个核心文件:svnserve.conf(主配置)、passwd(账号密码)、authz(目录权限)。

1. 三个配置文件作用:

(1) svnserve.conf(主配置文件):

        开启 / 关闭匿名访问、指定密码文件、权限规则文件

[general]
anon-access = none    # 匿名用户:read可读 / write读写 / none禁止访问
auth-access = write   # 认证成功用户默认权限
password-db = passwd  # 用户账号密码文件
authz-db = authz      # 路径权限控制文件(细粒度目录权限)
realm = 项目仓库名称

(2) passwd:账号密码库,只保存用户名和密码:

[users]
admin = 123456
zhangsan = 654321
lisi = 111111

(3) authz:路径权限文件(最重要!),支持分组、目录授权:

权限可选值:
rw读 + 写(检出、更新、提交)
r只读(只能检出更新,不能提交)
空/无完全禁止访问

        语法:

[groups]
# 定义用户组,@引用组
admin_group = admin
dev_group = zhangsan,lisi    # 多个用户间用逗号分开

#仓库根目录 [/]
[/]
@admin_group = rw
@dev_group = r
* =                          # 其他所有人禁止访问

# 仓库下/src目录,开发组可以读写
[/src]
@dev_group = rw

# 仓库下/doc目录,开发只能读
[/doc]
@dev_group = r

        * 代表所有未匹配用户。

2. SVN(svnserve 模式)权限配置完整步骤:

(1) 进入仓库的 conf 目录:

        如果是多仓库,每个仓库单独一套 conf,每个仓库要分别配置!

例:/svn/repos/projectA/conf

(2) 修改 svnserve.conf(主配置文件,开启认证,关联另外两个文件):

        打开 svnserve.conf,去掉前面注释#,修改下面配置:

[general]
anon-access = none          # 关闭匿名访问;可选read(匿名可读)/write(匿名读写)/none(禁止匿名)
auth-access = write         # 登录成功的用户默认权限
password-db = passwd        # 指定账号密码文件(相对conf目录)
authz-db = authz            # 指定目录权限控制文件
realm = MySVNProject        # 仓库提示名称,自定义

        注意:等号两边的空格不能丢,#是注释,要删掉#才生效。

        

(3) 编辑 passwd 文件,添加用户账号和密码:

        打开 passwd,在[users]下面增加账号:

        格式:用户名 = 密码

[users]
admin = 123456
zhangsan = abc123
lisi = 666888

        只负责存账号密码,不分配目录权限

        

(4) 编辑 authz 文件,配置分组 + 目录读写权限:

        1) 打开authz,先定义用户组(可选,方便批量授权)

# 多个用户间用逗号分开。
[groups]
admin_group = admin
dev_group = zhangsan,lisi

        2) 配置仓库路径权限:

# 仓库根目录 /
[/]
@admin_group = rw
@dev_group = r
* =                         # 其他所有用户,无任何访问权限

# /src目录,开发组可读可写
[/src]
@dev_group = rw

# /doc目录,开发组只读
[/doc]
@dev_group = r
权限取值:
rw读写(检出、更新、提交)
r只读(只能看,不能提交)
空禁止访问

(5) 重启 svnserve 服务:

        修改 svnserve.conf / passwd → 需要重启 svnserve 生效;

        修改 authz(路径权限文件)→ 无需重启服务,实时生效;

        

(6) 客户端测试:

        TortoiseSVN checkout,输入 svn 地址,输入账号密码验证权限。

3. 配置自动启动服务:

        原理:Windows自带sc命令创建系统服务,必须管理员身份打开CMD;svnserve必须加--service参数(不能用-d)。

        适用:多仓库场景,-r 填写仓库总父目录(所有仓库放在这个目录下)

(1) 确认路径:

        svnserve.exe 路径:例如 C:\Program Files\TortoiseSVN\bin\svnserve.exe

        仓库根目录(多仓库的父目录):D:\svn_repos

        注意:如果路径带空格,整个 binpath 要用英文双引号包裹。

        

(2) 管理员CMD执行sc create注册服务:

sc create SVNService binpath= "C:\Program Files\TortoiseSVN\bin\svnserve.exe --service -r D:\svn_repos" displayname= "SVN版本库服务" depend= Tcpip start= auto
参数解释:
SVNService内部服务名称(自定义,启停命令用这个名字)
binpath=等号右边必须有空格!
--service以 Windows 服务模式运行(不能写 -d)
-r仓库根目录(多仓库场景填父目录)
displayname在 Windows 服务管理器显示的名称
depend= Tcpip依赖 TCP/IP 协议,网络就绪后才启动
start= auto开机自动启动
成功提示:[SC] CreateService 成功

(3) 启动服务:

# 启动服务命令:
net start SVNService
# 停止服务命令:
net stop SVNService

(4) 验证与防火墙:

        打开服务面板:Win+R → 输入 services.msc,找到「SVN 版本库服务」,启动类型为自动。

        防火墙放行 3690 端口(svnserve 默认端口,svn:// 协议)。

        测试:客户端 TortoiseSVN checkout svn://本机IP/仓库名。

        

(5) 删除服务(需要卸载时):

sc delete SVNService

4.创建启停服务的批处理文件:

(1) 启动服务:

# net start 服务名称
net start SVNService

(2) 停止服务:

# net stop 服务名称
net stop SVNService

(3) 删除服务:

# net delete 服务名称
net delete SVNService

(4) 以上功能在实际项目开发中经常使用,所以可以封装为.bat批处理文件,效果如下:

六、钩子程序

1. 钩子程序的概念:

        钩子是服务器仓库目录下 hooks 文件夹里的脚本程序,当发生提交、修改属性、锁定等事件时自动触发执行。

2. 钩子程序的种类:

        钩子脚本放在服务端仓库 hooks 目录,是服务器钩子。

        钩子程序分为三大类(共9种):

                (1) 提交相关。
                (2) 版本属性修改相关。
                (3) 锁定解锁相关。

        见下表:

分类

钩子名称

触发时机

作用

能否阻断操作

典型用途

提交相关

start-commit

提交事务创建之前执行

可以校验用户是否允许提交。

可以阻断提交。

校验用户账号是否有权限提交仓库;简单黑名单控制,在提交一开始就拒绝用户

pre-commit

提交事务完成前(事务还没写入仓库)

校验本次提交

可以阻断提交

1.检查提交日志不能为空;2.禁止提交指定类型文件;3.校验代码格式/规范;

post-commit

提交成功完成之后,版本号已经生成

提交完成后的回调

不能阻断(已经提交成功)

1.发送邮件通知;2.自动部署代码;3.触发持续集成构建;

版本属性修改相关

pre-revprop-change

修改版本属性前(比如修改已经提交的 log 备注)

控制是否允许修改历史提交属性

可以阻断

SVN默认禁止修改历史提交日志;开启这个钩子,才允许修改提交备注。

post-revprop-change

修改版本属性成功之后

属性修改完成回调

不能阻断

历史日志被修改后,发送通知、记录审计日志。

锁定解锁相关

pre-lock

文件加锁之前

控制是否允许获取锁定

可以阻断

控制锁定权限:限制哪些用户可以锁定文件;禁止对某些文件加锁。

post-lock

文件锁定成功之后

加锁完成回调

不能阻断

发送锁定通知,告知团队某人锁定了该二进制文件。

pre-unlock

解锁之前

控制解锁权限

可以阻断

校验解锁权限:不允许别人强行释放他人锁;防止随意抢锁。

post-unlock

解锁成功之后

解锁完成回调

不能阻断

发送解锁通知:通知团队文件锁已释放,可以编辑。

        总结:

                前缀 pre-:事件发生前,可以阻断操作;

                前缀 post-:事件发生完成后,无法阻断;

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/inferno_lucerne/article/details/166994831

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--