【PE】利用SVN的SubWCRev.exe管理同步專案的版本號
### Date: 2017/3/18
###Author: SoaringLee
參考:http://blog.csdn.net/listener51/article/details/53199086
一、Windows平臺
關於subwcrev.exe參見:
http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev.html
http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html
基本格式是:
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]
所以需要在VS對應的工程中新建兩個檔案,一個是SrcVersionFile和DstVersionFile,其中:
-
1.WorkingCopyPath工程所在的目錄
-
2.SrcVersionFile含有SubWCRev.exe程式可以替換的巨集;
-
3.DstVersionFile為更新svn之後把巨集替換掉以後的目標檔案。
例如:
SrcVersionFile為一個標頭檔案,名字叫Template.Source.Version.h,其內容如下:
-
#pragma once
-
#define VER_UMS_HQ_MAJOR 2
-
#define VER_UMS_HQ_MINOR 2
-
#define VER_UMS_HQ_SVN $WCREV$
-
#define VER_UMS_HQ_REVISION "2.2.$WCREV$.0"
DstVersionFile檔案為另外一個標頭檔案,名字叫Source.Version.h,其內容如下:
-
#pragma once
-
#define VER_UMS_HQ_MAJOR 2
-
#define VER_UMS_HQ_MINOR 2
-
#define VER_UMS_HQ_SVN 8465
-
#define VER_UMS_HQ_REVISION "2.2.8465.0"
然後在工程屬性設定:
Build Event選項->Pre-Build Event的Command Line中輸入:
subwcrev.exe “./” “./Template.Source.Version.h” “./Source.Version.h”
這樣每次用svn更新程式碼時,svn的專案版本號也更新下來了,並最終替換掉 Template.Source.Version.h中巨集$WCREV$,生成Source.Version.h中的內容。
TortoiseSVN下有一個SubWCRev程式,可以獲取任意個路徑對應的SVN版本庫的版本號。並替換到檔案對應位置。
VC2010的資原始檔可以控制生成的二進位制檔案版本號。
可以利用VC2010的生成前命令,呼叫SubWCRev來獲取最新的SVN版本號並寫入生成的二進位制檔案中。
程式也可以判斷呼叫的DLL版本號是否比本身大。以控制不會呼叫不對應的動態庫。可以使依賴多了一層執行時保證。
實現該目的,需要
- 每次編譯前,從svn獲取當前版本庫的版本號,並寫入資原始檔
- 編譯完成後,打安裝包時,讀取版本資訊
需要注意兩點:
1,svn的工具可獲取版本號並更新到專案檔案
如果提供了原始檔和目的檔案,SubWCRev 會複製原始檔到目標檔案,執行如下所屬的關鍵字替換:
關鍵字 | 描述 |
---|---|
$WCREV$ | 用工作副本中最高的提交版本來替換 |
$WCDATE$ | 用最高提交版本的日期/時間替換。預設使用國際化格式:yyyy-mm-dd hh:mm:ss 。作為選擇,你可以指定strftime() 使用自定義格式,例如:$WCDATE=%a %b %d %I:%M:%S %p$ 。格式字元的列表參見線上引用。 |
$WCNOW$ | Replaced with the current system date/time. This can be used to indicate the build time. Time formatting can be used as described for$WCDATE$ . |
$WCRANGE$ | 在工作目錄用更新版本範圍替換。如果工作目錄處於一致的狀態,它是一個單一版本。如果工作目錄包含混合版本,或者是過時,或者是故意更新到版本,那麼這個範圍會用象100:200這樣的格式來顯示。 |
$WCMIXED$ | 當有混合版本時用TText 替換$WCMIXED?TText:FText$ ,否則用FText 替換。 |
$WCMODS$ | 若本地存在修改,就用TText 替換$WCMODS?TText:FText$ ,否則用FText 替換。 |
$WCURL$ | 用傳遞給SubWCRev的工作目錄的版本庫地址替換。 |
$WCINSVN$ | $WCINSVN?TText:FText$ is replaced withTText if the entry is versioned, orFText if not. |
$WCNEEDSLOCK$ | $WCNEEDSLOCK?TText:FText$ is replaced withTText if the entry has thesvn:needs-lock property set, orFText if not. |
$WCISLOCKED$ | $WCISLOCKED?TText:FText$ is replaced withTText if the entry is locked, orFText if not. |
$WCLOCKDATE$ | Replaced with the lock date. Time formatting can be used as described for$WCDATE$ . |
$WCLOCKOWNER$ | Replaced with the name of the lock owner. |
$WCLOCKCOMMENT$ | Replaced with the comment of the lock. |
2、SubWCRev.exe從命令列或指令碼中執行,使用命令列引數控制。
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]
WorkingCopyPath
是要檢查的工作副本路徑,你可以只對工作副本使用SubWCRev,而不是直接對版本庫,這個路徑可以是絕對路徑,也可以是工作目錄的相對路徑。
如果你想讓SubWCRev執行關鍵字替換,象版本庫版本,地址等欄位儲存到文字檔案,就需要提供一個模版檔案SrcVersionFile
,輸出檔案DstVersionFile
就是模版替換之後的版本。
有幾個開關影響 SubWCRev工作。如果使用多個,必須用單個組指定,例如要用-nm
,不能用-n -m
。
表 5.2. 列出可用的命令列開關
切換 | 描述 |
---|---|
-n | If this switch is given, SubWCRev will exit withERRORLEVEL 7 if the working copy contains local modifications. This may be used to prevent building with uncommitted changes present. |
-m | If this switch is given, SubWCRev will exit withERRORLEVEL 8 if the working copy contains mixed revisions. This may be used to prevent building with a partially updated working copy. |
-d | If this switch is given, SubWCRev will exit withERRORLEVEL 9 if the destination file already exists. |
-f | 如果給出這個開關,SubWCRev 就會包含資料夾的最後修改版本。預設行為是取得版本號時只考慮檔案。 |
-e | If this switch is given, SubWCRev will examine directories which are included withsvn:externals , but only if they are from the same repository. The default behaviour is to ignore externals. |
-x | If this switch is given, SubWCRev will output the revision numbers in HEX. |
-X | If this switch is given, SubWCRev will output the revision numbers in HEX, with '0X' prepended. |
二、Linux平臺
Linux平臺下可以通過Subversion或者svn info生成定義,命令如下:
$(shell subversion -n|grep [0-9]*[A-M])
$(shell svn info|grep Revision|awk 'print $2’)
相關文章
- ResHacker 用命令列方式修改 windows PE檔案版本號命令列Windows
- eclipse svn怎麼讓其同步整個專案?Eclipse
- svn檔案管理
- maven如何快速更新子模組專案的版本號Maven
- IDEA svn專案 更換SVN地址Idea
- svn和git版本管理優缺點Git
- 對專案版本自動控制——利用gitversionGit
- linux svn server搭建、多專案管理及主備方案LinuxServer專案管理
- 版本管理工具之Git 和SVNGit
- [轉載]SVN系列之—-SVN版本回滾的辦法
- mac下利用pyenv管理多個版本的pythonMacPython
- 如何利用專案管理軟體制定專案進度計劃?專案管理
- 專案中使用SVN簡介
- 利用 Webpack 實現小程式多專案管理Web專案管理
- 如何利用現代工具來管理多專案
- [Flutter翻譯]每個專案都有獨立的Flutter版本 - Flutter版本管理器Flutter
- 鎖定專案的 node 版本
- SVN培訓筆記(下拉專案、同步修改、新增檔案、修改檔案、刪除檔案、改名檔案等)筆記
- git專案之間的commit同步GitMIT
- Git同步遠端fork的專案Git
- 體驗 Orbeon form PE 版本提供的 JavaScript Embedding APIORBORMJavaScriptAPI
- windows載入PE檔案的流程Windows
- 一行命令同時修改maven專案中多個mudule的版本號Maven
- SVN 建立版本庫 與 啟動 SVN 服務
- svn歷史版本刪除(為svn庫瘦身)
- [原創] 我的專案管理之路--2、認知專案管理專案管理
- SVN cornerstone專案branch, tags, trunk記錄
- 從事專案管理的朋友們,是如何有效管理專案進度的?專案管理
- MySQL的版本以及版本號MySql
- 鎖定專案 Node 版本和包管理器
- 如何規劃專案,提高專案管理的效率?專案管理
- 專案管理中如何充分利用子任務專案管理
- CRM中的專案管理:搭建CRM與專案一體化管理專案管理
- Ruby on Rails 生成指定版本的 Rails 專案AI
- 為不同專案指定不同的 PHP 版本PHP
- Xcode專案的多Target管理XCode
- 專案管理認證的行情專案管理
- 理想中的專案管理app專案管理APP