ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SVN学习笔记(二)

SVN学习笔记(二) 目录四、配置多仓库1. 多仓库的概念2. 创建多仓库的步骤3. 总结五、SVN权限控制1. 三个配置文件作用2. SVNsvnserve 模式权限配置完整步骤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. SVNsvnserve 模式权限配置完整步骤(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,lisi2) 配置仓库路径权限# 仓库根目录 / [/] 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命令创建系统服务必须管理员身份打开CMDsvnserve必须加--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) 验证与防火墙打开服务面板WinR → 输入 services.msc找到「SVN 版本库服务」启动类型为自动。防火墙放行 3690 端口svnserve 默认端口svn:// 协议。测试客户端 TortoiseSVN checkout svn://本机IP/仓库名。(5) 删除服务需要卸载时sc delete SVNService4.创建启停服务的批处理文件(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-事件发生完成后无法阻断
返回列表