### SVN在Windows下利用Hook自动发布到Web服务器的知识点解析 #### 一、SVN与Hook的基本概念 - **Subversion (SVN)**:一种开源的版本控制系统,用于管理源代码或文档等文件的历史版本。 - **Hook**:SVN中的hook是一种脚本机制,可以在特定事件(如提交更改)发生时自动执行。这些脚本可以用来实施策略或自动化工作流程,例如检查提交的消息格式是否正确、触发构建过程或自动部署。 #### 二、配置SVN Hook实现自动发布的原理 ##### 1. 基本思路 通过编写一个批处理脚本,并将其作为SVN钩子的一部分,当有新的提交时,该脚本将被自动触发,从而实现将更新的内容自动发布到指定的Web服务器上。 ##### 2. 脚本解析 - **环境变量设置**:首先定义了几个关键的环境变量: - `SVN`:指向SVN命令行工具的路径。 - `SVNLOOK`:指向svnlook工具的路径,用于查看提交详情。 - `DIR`:本地临时目录路径,用于存放从SVN仓库拉取的文件。 - `VERPATH`:SVN仓库的URL路径。 - `CHANGEFILE`:记录变动的文件路径。 - `FTP_SERVER`:FTP服务器地址。 - `USERNAME`:FTP用户名。 - `PASSWD`:FTP密码。 - `FTP_QUERY_PATH`:FTP服务器上的目标路径。 - **处理逻辑**: - 使用`svnlook changed`命令获取提交的文件列表并保存到`CHANGEFILE`中。 - 循环读取`CHANGEFILE`中的每一行,即每一个发生变化的文件。 - 如果文件没有被删除,则执行以下操作: - 如果是目录,则创建对应的本地目录结构。 - 使用`svn cat`命令获取文件内容并写入到本地临时目录中。 - 生成FTP命令字符串,准备上传文件至FTP服务器。 - 使用`ftp`命令执行`ftpcmd.txt`文件中的FTP命令,完成文件上传。 #### 三、关键步骤详解 ##### 3.1 设置环境变量 - **SVN工具路径**:`SETSVN` 和 `SETSVNLOOK` 分别指定了SVN和svnlook工具的路径,确保脚本能够正常调用这些工具。 - **本地临时目录**:`SETDIR` 指定了本地临时目录的位置,用于存放从SVN仓库拉取的文件。 - **SVN仓库路径**:`SETVERPATH` 指定了SVN仓库的URL,以便脚本能访问该仓库。 - **FTP服务器配置**:`SETFTP_SERVER`、`SETUSERNAME`、`SETPASSWD` 和 `SETFTP_QUERY_PATH` 定义了FTP服务器的相关信息,包括服务器地址、用户名、密码以及目标路径。 ##### 3.2 处理文件变化 - **文件变化检测**:通过`%SVNLOOK%changed%REPOS%%REV%>%CHANGEFILE%`命令,将本次提交中所有发生变化的文件名存储到`CHANGEFILE`文件中。 - **文件内容拉取**:对于每个发生变化但未被删除的文件,使用`%SVN%cat-rHEAD%VERPATH%/%str:~4%>%DIR%/%str:~4%`命令从SVN仓库拉取最新的文件内容并存放到本地临时目录中。 ##### 3.3 FTP文件上传 - **FTP命令文件生成**:通过一系列的`@echo`命令生成FTP命令文件`ftpcmd.txt`,其中包含了登录FTP服务器、切换目录、上传文件等命令。 - **执行FTP命令**:最终使用`@ftp-n<ftpcmd.txt>>ftplog.txt`命令执行上述FTP命令,完成文件的上传操作。 #### 四、扩展与优化建议 - **错误处理**:增加对脚本运行过程中可能出现的错误进行捕获和处理,提高脚本的健壮性。 - **日志记录**:记录每次部署的详细信息,便于问题排查。 - **安全性增强**:考虑使用更安全的方式存储FTP密码,比如使用环境变量或加密存储。 - **并发处理**:如果文件数量较多,可以考虑引入并发机制,加快文件上传的速度。 #### 五、总结 通过以上分析,我们可以看到该脚本巧妙地利用了SVN的hook机制,实现了版本控制系统的提交与Web服务器部署之间的自动化连接,极大地提高了开发效率和部署速度。同时,通过对脚本的深入理解,我们还可以根据实际需求对其进行定制化修改和优化,以满足更加复杂的应用场景。
@REM ----定义常量
SET SVN=D:/SVN/VisualSVN/bin/svn.exe
SET SVNLOOK=D:/SVN/VisualSVN/bin/svnlook.exe
@REM ----DIR 临时目录位置
SET DIR=D:/SVN/FtpTemp/fulTest
SET VERPATH=http://10.1.16.28:888/svn/fulTest
@REM ----CHANGEFILE 版本的变化日志 第一个字母 A-增加 U-修改 D-删除 ,D 的不处理
SET CHANGEFILE=D:/SVN/FtpTemp/Log/fulTest.log
@REM ----FTP 相应配置
SET FTP_SERVER=10.1.16.28
SET USERNAME=hsm
SET PASSWD=password123?
SET FTP_QUERY_PATH=/fulTest
@REM ------------下面的基本不动做修改--------------------------------------
@REM ----定义变量可以延时
SETLOCAL ENABLEDELAYEDEXPANSION
@REM ----接收由SVN传过来的两个参数
SET REPOS=%1
SET REV=%2
- zyhome2013-09-02学习了。。。
- MrsLonely2014-01-07很多地方需要改进,而且解释不清
- docget2013-02-25不是很方便
- 天涯Kevin2013-01-31还需要改进
- 粉丝: 0
- 资源: 48
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助