之前工作,都是手工做补丁包,需要编译文件,可SVN上只有源文件,因此比较费时费力。
于是,就想着用ant编译版本差异文件,并自动生成补丁。
而实现的关键就在于,如何导出版本差异文件。经过一些尝试后,有如下两种可行的方式:
1. 如果是windows系统,可以通过TortoiseSVN手工导出差异文件,具体操作可以参考:
http://blog.miniasp.com/post/2008/09/Using-TortoiseSVN-to-Export-Only-Added-Modified-Files.aspx
2. 命令行实现,这个是我做的补丁工具的重点。步骤如下:
(1) 安装Subversion,SVN命令。
http://subversion.apache.org/download/
(2) 在配置文件build.properties中需要配置两个参数,如下:
# svn url url=http://.... # 存放导出文件的临时目录 tempdir=temp
比较懒,在用TortoiseSVN登陆SVN时,记住了用户名密码,命令行这里也就不需要再配置以及登陆。
(3) 命令行实现。只写了windows批处理。有需要的话可以根据系统改写一下。
需要说明一下,Subversion命令无法直接导出版本差异文件。
简单介绍一下自己的思路,先用diff命令获得版本差异文件列表,再循环这个文件列表逐个导出文件。
@echo off setlocal enabledelayedexpansion set config_file=build.properties set from_version=%1 set to_version=%2 rem 输入参数 rem set /p from_version=请输入补丁升级前的版本: rem set /p to_version=请输入补丁升级后的版本: rem 读取配置文件 for /f "tokens=1,2 delims==" %%i in (%config_file%) do ( set %%i=%%j ) rem 删除临时文件 set current_path=%~dp0 del /f /s /q %current_path%%tempdir% rem 比较差异文件 svn diff --summarize -r %from_version%:%to_version% %url% > file_list.txt rem 导出差异文件 for /f "delims=" %%i in (file_list.txt) do ( call :export %%i ) goto :EOF :export set fullpath=%2 set filename=%~nx2 set "filepath=!fullpath:%filename%=!" set "filepath=!filepath:%url%=!" set "filepath=%filepath:/=\%" if not exist %tempdir%%filepath% mkdir %tempdir%%filepath% svn export -r %to_version% %fullpath% %tempdir%%filepath%%filename%
如有错误或疏漏,还请大家不吝赐教,拜谢~