命令行导出SVN版本差异文件

  之前工作,都是手工做补丁包,需要编译文件,可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%

  如有错误或疏漏,还请大家不吝赐教,拜谢~

 

 

 

转载于:https://www.cnblogs.com/cnslyq/archive/2012/11/03/2752577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值