命令行導出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%

  如有錯誤或疏漏,還請大家不吝賜教,拜謝~

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM