SVN
全称 Subversion
,是 CVS
的替代品,在当前时间节点,与 Git
共同为软件公司采用,进行项目管理。
软件安装
主流的 SVN 服务端为 VisualSVN Server,客户端为 TortoiseSVN,以下操作都以上述软件为例。
工作流程
项目经理首先将项目初始化到 SVN 服务器
上,开发人员首次获取远程仓库使用 Checkout
命令,之后如服务器发生变更,使用 Update
命令更新代码,本地开发完成后,使用 Commit
命令提交。
—————Commit—————>| SVN Server
Project Manager <————Checkout————| svn://192.168.1.1
<————Update——————| Project Shop
| |--core.php
<————Checkout————| |--common.php
Developer <————Update——————|
—————Commit—————>|
服务端配置
初始化版本仓库
- 安装好
SVN 服务端
后,创建D://SVN/WebApp
文件夹存放所有项目 - 进入
WebApp
目录,新建Shop
目录作为当前项目仓库 CMD 窗口
切换到WebApp
,通过svnadmin create Shop
命令初始化版本仓库
监管仓库目录
启动监管服务后,客户端才能通过 svn://ip
访问到项目仓库。
REM 启动后台监管
REM -d(daemon) -r(repository)
svnserve -d -r D://SVN/WebApp/Shop
如有多个仓库,可监管所有项目的上级目录,此时客户端可通过 svn://ip/repo/name
访问某个仓库。
REM 启动监管
REM -d(daemon) -r(repository)
svnserve -d -r D://SVN/WebApp
使用命令监管需要保持窗口状态,不能关闭,也无法开机自启,为解决以上问题,可将其添加到 Windows Services
。具体操作为,在 CMD 中以管理员身份执行以下命令。
REM 创建服务
sc create SVNService binpath="C:\Program Files\Subvision\bin\svnserve.exe --service -r D:\SVN" start=auto
REM 开启服务
net start SVNService
REM 停止服务
net stop SVNService
REM 删除服务
sc delete SVNService
权限控制
默认情况下,SVN 服务端不允许匿名用户上传文件,为了方便调试,可对项目目录下的 conf/svnserve.conf
文件进行更改。
REM 所有用户均可读可写
anon-access = write
但在实际开发中,处于安全考虑,应该建立多个 SVN 账号,并对它们分配不同权限。具体操作为,更改项目目录下的 conf/svnserve.conf
文件,打开认证选项。
REM 禁用匿名用户访问
# anon-access = write
REM 打开认证功能
password-db = passwd
authz-db = authz
随后,更改项目目录下的 conf/passwd
文件,配置用户名和密码。
[users]
admin = admin
logi1 = 123456
logi2 = 123456
logi3 = 123456
logi4 = 123456
最后,更改项目目录下的 conf/authz
文件,配置用户分组,和各组权限。
[groups]
admin = admin
developer = logi1,logi2,logi3,logi4
# 对每个仓库单独配置
[Shop:/]
@admin = rw
@developer = r
# * 代表剩下的组,或匿名组
* = r
同步 SVN 和 WEB 服务器
为了实时预览 SVN 服务器上的文件,可将其同步到 WEB 服务器中,方便浏览器访问查看。该需求可通过 SVN 服务器提供的 钩子程序
实现。此处,我们利用项目目录下的 hooks/post-commit.tmpl
钩子,它在 commit
完成后被触发,钩子一般使用 bat
或 shell
开发。
新建 hooks/post-commit.cmd
文件,并编写以下内容。
REM Apache HTML 文件目录
SET WEB_SERVER_DIR="D:\server\apache\htdocs\shop"
REM SVN 可执行程序
SET SVN="D:\svn\bin\svn.exe"
REM 更新数据到 Apache 目录
%SVN% update %WEB_SERVER_DIR%
切换到 Apache HTML
目录,进行一次 Checkout
操作,此后,服务端一旦收到 commit
,便会触发批处理,随后便可通过浏览器预览提交。
客户端使用
客户端安装完毕后需要重启电脑加载注册表,否则 SVN 状态图标
不会显示。如需汉化,先安装汉化包,随后右键桌面空白处,依次点击 TortoiseSVN -> Settings -> General
,选择 Language
下拉框中的 中文(简体)
确定即可。
拉取服务端代码
新建项目目录并进入,空白处右键鼠标,依次进入 TortoiseSVN -> 版本库浏览器
,输入 SVN 服务器 svn://192.168.1.1
后点击确定。右键版本库中列出的仓库,选择 检出
,点击 确定
。此时,打开文件管理器的 显示隐藏文件选项
,便可看到初始化的 .svn
文件夹。
Checkout
做了两件事,首先与服务端建立连接,其次拉取最新代码。以后如需更新代码,要使用 Update
指令。
更新服务端代码和本地代码提交
更新代码使用 Update
。提交代码用 Commit
,需要说明的是 message
要根据公司规定填写,例如 模块——功能——作者
。
图标含义和忽略文件列表
右键项目目录空白处,依次进入 TortoiseSVN -> 设置 -> 图标覆盖 -> 图标集
可查看所有图标含义。
对于无需上传服务器的文件,可将其添加到忽略列表。具体操作为右键项目需要忽略的文件,依次点击 TortoiseSVN -> 增加到忽略列表
,可选择通配符形式,如 *.ppt
,如果是目录,选择 以递归方式忽略
。
版本回退
一般误删文件或新版本有重大问题时,要进行版本回退。右键项目目录空白处,依次进入 TortoiseSVN -> 更新至版本
。在 回退对话框
中点击 显示日志
,在弹出的 日志对话框
中,选择 对应提交
后确定,之后点击 回退对话框
的确定即可。
解决版本冲突
假设开发人员 A 和 B 同时拉取服务器上的同一文件进行开发,A 先于 B 提交,B 在提交时就会发送版本冲突。
此时,B 应该先 Update
,随后手动编辑文件解决冲突,可与 A 商量如何解决,最后 Commit
。
假设 index.php
发生冲突,在 Update
后会生成 4 个相关文件,分别是:
- 整合后的文件,index.php
- B 自己开发的文件,index.php.mine
- 两人都未开发前的文件:index.php.r6
- A 先开发完毕提交的文件,index.php.r7
B 只需将 index.php
中的冲突解决,随后删除其他三个文件,提交即可。冲突区域如下所示:
<<<<<<< .mine
echo 'by B'
=======
echo 'by A'
>>>>>>> .r7
如有问题请在下方留言,文章转载请注明出处,详细交流请加下方群组!请大佬不要屏蔽文中广告,因为它将帮我分担服务器开支,如果能帮忙点击我将万分感谢。