2010-09-03 106 views
1

我在我的SVN項目中有revision.txt文件。如何在未提交此文件的每次提交的未修改文件中更新修訂號?

基本上我希望當我調用svn ci時,該文件會自動更新,並提供工作副本在提交後的版本號。

例如:

  1. revision.txt包含 「10」
  2. 我做出一些改變我的工作拷貝(其他文件,而不是rev​​ision.txt)
  3. SVN CI
    • 啓動掛鉤腳本
    • 閱讀下一修訂版編號
    • 更新revision.txt
    • 提交更改(也revision.txt)
  4. 現在revision.txt已經承諾與版本號11

我試着不帶鉤子腳本成功。在提交之前,我無法檢索下一個版本號並更新交易者。

然後嘗試使用「自動道具」,但它們只與修改過的文件一起工作。 更好的解決方案是隻使用鉤子腳本,而不是使用包裝腳本來檢查修訂和更新。

可能嗎?歡迎舉例

回答

2

由於競爭條件,您無法在提交前猜出下一個版本號 - 直到事實發生之前,您不能保證別人沒有領先於您。在svn commit hook中更改文件也是非常糟糕的形式 - 工作副本的所有過時和雜亂,因爲它們只從服務器獲得「它的工作」或「失敗」,從來沒有「工作,但通過該文件現在有這些內容的方式...「

你需要什麼?也許還有另一種方法來獲得你想要實現的目標。

您可以在需要之前使用「svn info」自動生成revision.txt文件,並將「Revision:」行過濾到文件中。

+0

我有一個有多個用戶(uh..SVN!:)的中央存儲庫,並且該文件由軟件直接讀取,以在交付時顯示版本附近的最新版本。人們永遠不會記得更新號碼,我們還沒有一個部署系統。所以我們導出項目並在最終服務器上手動複製它。 好的......我需要一個嚴肅的部署策略...... – yuri 2010-09-03 15:50:23

+0

正如我在我自己的回答中所說的,你應該使用'svnversion'而不是'svn info'。 – 2010-09-07 16:43:22

0

正如你已經提到的基於svn:關鍵字,它只能改變修改後的文件。但我認爲你需要的是一個處理這種信息的構建系統(可能是構建服務器/連續集成服務器)。

0

Keyword substitution最接近你想要的,但這並不真正有效,因爲它給你的是文件的最後修改,而不是項目的最後修改。從subversion FAQ on this issue:

你想(你的工作拷貝修訂 )的信息是從命令可用 svnversion,如果;它會給出 有關給定路徑的工作副本的修訂級別 的信息(有關詳細信息,請參閱 svnversion --help)。

您可以將它合併到您的版本 或發佈過程中,以獲取您需要的 信息到源 本身。

相關問題