手冊

專案設定

Subversion 屬性

圖 4.37。 Subversion 屬性頁面

Subversion property page


您可以從 Windows 屬性對話方塊讀取和設定 Subversion 屬性,也可以從 TortoiseSVN屬性,以及 TortoiseSVN 的狀態清單中,從 右鍵選單屬性 進行操作。

您可以新增自己的屬性,或是在 Subversion 中具有特殊意義的屬性。這些屬性以 svn: 開頭。svn:externals 就是這樣的一個屬性;請參閱名為「外部項目」的章節,了解如何處理外部項目。

svn:keywords

Subversion 支援類似 CVS 的關鍵字展開,可用於在檔案本身中嵌入檔案名稱和修訂資訊。目前支援的關鍵字有

$Date$

最後一次已知提交的日期。這是根據您更新工作副本時取得的資訊。它不會檢查儲存庫以尋找更新的變更。

$Revision$

最後一次已知提交的修訂版本。

$Author$

進行最後一次已知提交的作者。

$HeadURL$

此檔案在儲存庫中的完整 URL。

$Id$

前面四個關鍵字的壓縮組合。

若要了解如何使用這些關鍵字,請參閱 Subversion 書籍中 svn:keywords 章節 ,其中完整說明了這些關鍵字以及如何啟用和使用它們。

關於 Subversion 中屬性的更多資訊,請參閱 特殊屬性

新增和編輯屬性

圖 4.38。 新增屬性

Adding properties


若要新增屬性,請先按一下 新增...。從選單中選取所需的屬性名稱,然後在特定的屬性對話方塊中填寫必要的資訊。這些特定的屬性對話方塊在名為「屬性編輯器」的章節中有更詳細的描述。

若要新增沒有自己對話方塊的屬性,請從 新增... 選單中選擇 進階。然後在下拉式方塊中選取現有的屬性,或輸入自訂的屬性名稱。

如果您要一次將屬性套用至多個項目,請在檔案總管中選取檔案/資料夾,然後選取 右鍵選單屬性

如果您要將屬性套用至目前資料夾下方階層中的每個檔案和資料夾,請勾選 遞迴 核取方塊。

如果您要編輯現有的屬性,請從現有的屬性清單中選取該屬性,然後按一下 編輯...

如果您要移除現有的屬性,請從現有的屬性清單中選取該屬性,然後按一下 移除

svn:externals 屬性可用於從同一個儲存庫或完全不同的儲存庫中提取其他專案。如需更多資訊,請閱讀名為「外部項目」的章節

編輯 HEAD 修訂版本的屬性

由於屬性是版本化的,因此您無法編輯先前修訂版本的屬性。如果您從記錄對話方塊或儲存庫瀏覽器中的非 HEAD 修訂版本查看屬性,您會看到屬性和值的清單,但沒有編輯控制項。

匯出和匯入屬性

您經常會發現自己多次套用相同的屬性集,例如 bugtraq:logregex。為了簡化將屬性從一個專案複製到另一個專案的過程,您可以使用匯出/匯入功能。

從已設定屬性的檔案或資料夾中,使用 TortoiseSVN屬性,選取您要匯出的屬性,然後按一下 匯出...。系統會提示您輸入檔案名稱,屬性名稱和值將儲存在該檔案中。

從您要套用這些屬性的資料夾中,使用 TortoiseSVN屬性,然後按一下 匯入...。系統會提示您輸入要從中匯入的檔案名稱,請導覽至您先前儲存匯出檔案的位置並選取它。屬性將會以非遞迴方式新增至資料夾。

如果您要以遞迴方式將屬性新增至樹狀結構,請按照上述步驟操作,然後在屬性對話方塊中依序選取每個屬性,按一下 編輯...,勾選 遞迴套用屬性 方塊,然後按一下 確定

匯入檔案格式是二進位且為 TortoiseSVN 專有。其唯一目的是使用匯入和匯出傳輸屬性,因此無需編輯這些檔案。

二進位屬性

TortoiseSVN 可以使用檔案處理二進位屬性值。若要讀取二進位屬性值,請 儲存... 到檔案。若要設定二進位值,請使用十六進位編輯器或其他適當的工具建立包含所需內容的檔案,然後從該檔案 載入...

雖然二進位屬性不常用,但在某些應用程式中可能很有用。例如,如果您要儲存大型圖形檔案,或者用於載入檔案的應用程式很大,您可能需要將縮圖儲存為屬性,以便快速取得預覽。

自動屬性設定

您可以設定 Subversion 和 TortoiseSVN,以便在檔案和資料夾新增至儲存庫時自動設定屬性。有兩種方法可以做到這一點。

您可以編輯 Subversion 組態檔,以在您的用戶端上啟用此功能。TortoiseSVN 設定對話方塊的 一般 頁面有一個編輯按鈕,可直接帶您到該處。組態檔是一個簡單的文字檔,用於控制 Subversion 的某些運作方式。您需要變更兩件事:首先,在標題為 miscellany 的章節中,取消註解 enable-auto-props = yes 行。其次,您需要編輯下面的章節,以定義要將哪些屬性新增至哪些檔案類型。此方法是標準的 Subversion 功能,適用於任何 Subversion 用戶端。但是,它必須在每個用戶端上個別定義 - 無法從儲存庫傳播這些設定。

另一種方法是在資料夾上設定 tsvn:autoprops 屬性,如下一節所述。此方法僅適用於 TortoiseSVN 用戶端,但它會在更新時傳播到所有工作副本。

從 Subversion 1.8 開始,您也可以在根資料夾上設定屬性 svn:auto-props。屬性值會自動由所有子項目繼承。

無論您選擇哪種方法,都應注意,自動屬性僅在檔案新增至工作副本時才套用至檔案。自動屬性永遠不會變更已版本化檔案的屬性。

如果您想完全確定新檔案已套用正確的屬性,您應該設定儲存庫預先提交勾點,以拒絕未設定必要屬性的提交。

提交屬性

Subversion 屬性是版本化的。在您變更或新增屬性之後,您必須提交您的變更。

屬性衝突

如果在提交變更時發生衝突,因為另一個使用者變更了相同的屬性,Subversion 會產生一個 .prej 檔案。在您解決衝突後,請刪除此檔案。

TortoiseSVN 專案屬性

TortoiseSVN 有一些自己的特殊屬性,這些屬性以 tsvn: 開頭。

  • tsvn:logminsize 設定提交記錄訊息的最小長度。如果您輸入的訊息短於此處指定的長度,則會停用提交。此功能對於提醒您為每次提交提供適當的描述性訊息非常有用。如果未設定此屬性,或值為零,則允許空白記錄訊息。

    tsvn:lockmsgminsize 設定鎖定訊息的最小長度。如果您輸入的訊息短於此處指定的長度,則會停用鎖定。此功能對於提醒您為取得的每個鎖定提供適當的描述性訊息非常有用。如果未設定此屬性,或值為零,則允許空白鎖定訊息。

  • tsvn:logwidthmarker 用於需要記錄訊息在換行之前以某個最大寬度(通常為 80 個字元)格式化的專案。將此屬性設定為非零值將在記錄訊息輸入對話方塊中執行兩項操作:它會放置一個標記以指示最大寬度,並且它會停用顯示中的自動換行,以便您可以查看您輸入的文字是否太長。注意:只有在您為記錄訊息選取固定寬度字型時,此功能才能正常運作。

  • tsvn:logtemplate 用於對記錄訊息格式有規則的專案。該屬性包含一個多行文字字串,當您開始提交時,該字串將插入到提交訊息方塊中。然後您可以編輯它以包含所需的資訊。注意:如果您也使用 tsvn:logminsize,請務必將長度設定為比範本長,否則您將失去保護機制。

    還有一些動作特定的範本,您可以取代 tsvn:logtemplate 使用。如果設定了動作特定的範本,則會使用這些範本,但如果未設定任何動作特定的範本,則會使用 tsvn:logtemplate

    動作特定的範本為

    • tsvn:logtemplatecommit 用於從工作副本進行的所有提交。

    • tsvn:logtemplatebranch 在您建立分支/標籤時,或在儲存庫瀏覽器中直接複製檔案或資料夾時使用。

    • tsvn:logtemplateimport 用於匯入。

    • tsvn:logtemplatedelete 在儲存庫瀏覽器中直接刪除項目時使用。

    • tsvn:logtemplatemove 在儲存庫瀏覽器中重新命名或移動項目時使用。

    • tsvn:logtemplatemkdir 在儲存庫瀏覽器中建立目錄時使用。

    • tsvn:logtemplatepropset 在儲存庫瀏覽器中修改屬性時使用。

    • tsvn:logtemplatelock 在取得鎖定時使用。

  • Subversion 允許您設定 自動屬性,這些屬性將根據檔案副檔名套用至新新增或匯入的檔案。這取決於每個用戶端是否在其 Subversion 組態檔中設定了適當的自動屬性。tsvn:autoprops 可以在資料夾上設定,並且在匯入或新增檔案時,這些屬性將與使用者的本機自動屬性合併。格式與 Subversion 自動屬性相同,例如 *.sh = svn:eol-style=native;svn:executable 會在副檔名為 .sh 的檔案上設定兩個屬性。

    如果本機自動屬性和 tsvn:autoprops 之間存在衝突,則專案設定優先,因為它們是專案特定的。

    從 Subversion 1.8 開始,您應該使用屬性 svn:auto-props 而不是 tsvn:autoprops,因為它具有完全相同的功能,但適用於所有 svn 用戶端,並且不是 TortoiseSVN 特有的。

  • 在「提交」對話方塊中,您可以選擇貼上已變更檔案的清單,包括每個檔案的狀態(已新增、已修改等)。tsvn:logfilelistenglish 定義檔案狀態是以英文還是以本地化語言插入。如果未設定該屬性,則預設值為 true

  • TortoiseSVN 可以使用拼字檢查器。在 Windows 10 上,使用作業系統的拼字檢查器。在較早版本的 Windows 上,它可以使用 OpenOffice 和 Mozilla 也使用的拼字檢查器模組。如果您已安裝這些模組,此屬性將決定要使用哪個拼字檢查器,即專案的記錄訊息應以哪種語言撰寫。tsvn:projectlanguage 設定當您輸入記錄訊息時,拼字檢查引擎應使用的語言模組。您可以在此頁面上找到您的語言的值: MSDN:語言識別碼

    您可以以十進位或十六進位輸入此值(如果以 0x 為字首)。例如,英文(美國)可以輸入為 0x04091033

  • 屬性 tsvn:logsummary 用於提取記錄訊息的一部分,然後在記錄對話方塊中顯示為記錄訊息摘要。

    tsvn:logsummary 屬性的值必須設定為包含一個 regex 群組的單行 regex 字串。符合該群組的任何內容都將用作摘要。

    例如:\[SUMMARY\]:\s+(.*) 將捕獲記錄訊息中 [SUMMARY] 之後的所有內容,並將其用作摘要。

  • 屬性 tsvn:logrevregex 定義一個正則表達式,該表達式與記錄訊息中對修訂版本的參考相符。這在記錄對話方塊中用於將此類參考轉換為連結,當按一下連結時,連結將捲動到該修訂版本(如果該修訂版本已顯示在記錄對話方塊中,或者如果它可以從記錄快取中取得)或開啟一個新的記錄對話方塊,顯示該修訂版本。

    正則表達式必須與整個參考相符,而不僅僅是修訂版本號碼。修訂版本號碼會自動從相符的參考字串中提取。

    如果未設定此屬性,則會使用預設的正則表達式來連結修訂版本參考。

  • 有幾個屬性可用於設定用戶端勾點腳本。每個屬性都用於一種特定的勾點腳本類型。

    可用的屬性/勾點腳本為

    • tsvn:startcommithook
    • tsvn:precommithook
    • tsvn:postcommithook
    • tsvn:startupdatehook
    • tsvn:preupdatehook
    • tsvn:postupdatehook
    • tsvn:prelockhook
    • tsvn:postlockhook

    參數與您在設定對話方塊中設定勾點腳本時相同。有關詳細資訊,請參閱名為「用戶端勾點腳本」的章節

    由於並非每個使用者都以相同的位置和相同的名稱取出其工作副本,因此您可以透過指定儲存庫中的 URL,將腳本/工具設定為在您的工作副本中執行,並使用 %REPOROOT% 作為儲存庫根目錄 URL 的一部分。例如,如果您的勾點腳本在您的工作副本中的 contrib/hook-scripts/client-side/checkyear.js 下,您將腳本的路徑指定為 %REPOROOT%/trunk/contrib/hook-scripts/client-side/checkyear.js。這樣一來,即使您將儲存庫移動到另一個伺服器,您也不必調整勾點腳本屬性。

    除了 %REPOROOT% 之外,您還可以指定 %REPOROOT+%+ 用於插入找到腳本所需的任意數量的資料夾路徑。如果您要指定您的腳本,以便在您建立分支時,即使工作副本的 URL 現在不同,仍然可以找到該腳本,這會很有用。使用上面的範例,您會將腳本的路徑指定為 %REPOROOT+%/contrib/hook-scripts/client-side/checkyear.js

    以下螢幕擷取畫面顯示如何為 TortoiseSVN 設定檢查原始檔標頭中目前著作權年份的腳本。

    圖 4.39。 勾點腳本的屬性對話方塊

    Property dialog for hook scripts


  • 當您要新增屬性時,您可以從下拉式方塊的清單中選取一個,也可以輸入您喜歡的任何屬性名稱。如果您的專案使用了一些自訂屬性,並且您希望這些屬性出現在下拉式方塊的清單中(以避免在您輸入屬性名稱時發生錯字),您可以使用 tsvn:userfilepropertiestsvn:userdirproperties 建立自訂屬性的清單。將這些屬性套用至資料夾。當您前往編輯任何子項目的屬性時,您的自訂屬性將會出現在預先定義的屬性名稱清單中。

    您還可以指定是否使用自訂對話方塊來新增/編輯您的屬性。TortoiseSVN 根據您的屬性類型提供四種不同的對話方塊。

    bool

    如果您的屬性只能有兩種狀態,例如 true 和 false,則您可以將您的屬性設定為 bool 類型。

    圖 4.40。 屬性對話方塊布林使用者類型

    Property dialog boolean user types


    像這樣指定您的屬性

    propertyname=bool;labeltext(YESVALUE;NOVALUE;Checkboxtext)

    labeltext 是顯示在核取方塊上方對話方塊中的文字,您可以在其中說明屬性的目的和用途。其他參數應該是不言自明的。

    state

    如果您的屬性代表多種可能的狀態之一,例如 yes, no, maybe,則您可以將您的屬性設定為 state

    圖 4.41。 屬性對話方塊狀態使用者類型

    Property dialog state user types
    Property dialog state user types
    Property dialog state user types


    像這樣的屬性

    propertyname=state;labeltext(DEFVAL;VAL1;TEXT1;VAL2;TEXT2;VAL3;TEXT3;...)

    參數與 bool 屬性相同,其中 DEFVAL 是如果屬性尚未設定或具有未設定的值時要使用的預設值。

    對於最多三個不同的值,對話方塊最多顯示三個選項按鈕。如果設定了更多值,它會使用一個下拉式方塊,使用者可以從中選取所需的狀態。

    singleline

    對於包含單行文字的屬性,請使用 singleline 屬性類型

    圖 4.42。 屬性對話方塊單行使用者類型

    Property dialog single-line user types


    propertyname=singleline;labeltext(regex)

    regex 指定一個正則表達式,該表達式用於驗證(比對)使用者輸入的文字。如果文字與正則表達式不符,則會向使用者顯示錯誤,並且不會設定屬性。

    multiline

    對於包含多行文字的屬性,請使用 multiline 屬性類型

    圖 4.43。 屬性對話方塊多行使用者類型

    Property dialog multi-line user types


    propertyname=multiline;labeltext(regex)

    regex 指定一個正則表達式,該表達式用於驗證(比對)使用者輸入的文字。別忘了在正則表達式中包含換行符號 (\n) 字元!

    上面的螢幕擷取畫面是使用以下 tsvn:userdirproperties 製作的

    my:boolprop=bool;This is a bool type property. Either check or uncheck it.(true;false;my bool prop)
    my:stateprop1=state;This is a state property. Select one of the two states.(true;true;true value;false;false value)
    my:stateprop2=state;This is a state property. Select one of the three states.(maybe;true;answer is correct;false;answer is wrong;maybe;not answered)
    my:stateprop3=state;Specify the day to set this property.(1;1;Monday;2;Tuesday;3;Wednesday;4;Thursday;5;Friday;6;Saturday;7;Sunday)
    my:singlelineprop=singleline;enter a small comment(.*)
    my:multilineprop=multiline;copy and paste a full chapter here(.*)
                

TortoiseSVN 可以與一些錯誤追蹤工具整合。這使用了以 bugtraq: 開頭的專案屬性。如需更多資訊,請閱讀名為「與錯誤追蹤系統/問題追蹤器的整合」的章節

它也可以與一些基於網路的儲存庫瀏覽器整合,使用以 webviewer: 開頭的專案屬性。如需更多資訊,請閱讀名為「與基於網路的儲存庫檢視器的整合」的章節

在資料夾上設定專案屬性

這些特殊的專案屬性必須在資料夾上設定,系統才能運作。當您使用使用這些屬性的 TortoiseSVN 命令時,會從您按一下的資料夾中讀取屬性。如果在那裡找不到屬性,TortoiseSVN 將向上搜尋資料夾樹狀結構以尋找它們,直到找到未版本化的資料夾或樹狀結構根目錄(例如 C:\)。如果您可以確定每個使用者僅從例如 trunk/ 而不是某些子資料夾中取出,則在 trunk/ 上設定屬性就足夠了。如果您不確定,則應在每個子資料夾上以遞迴方式設定屬性。如果您設定相同的屬性,但在專案階層結構中的不同深度使用不同的值,那麼您將根據您在資料夾結構中按一下的位置獲得不同的結果。

對於專案屬性僅限,即 tsvn:bugtraq:webviewer:,您可以使用 遞迴 核取方塊將屬性設定為階層結構中的所有子資料夾,而無需同時在所有檔案上設定。

當您使用 TortoiseSVN 將新的子資料夾新增至工作副本時,父資料夾中存在的任何專案屬性也會自動新增至新的子資料夾。

使用儲存庫瀏覽器的限制

遠端擷取屬性是一個緩慢的操作,因此上面描述的某些功能在儲存庫瀏覽器中無法像在工作副本中那樣運作。

  • 當您使用儲存庫瀏覽器新增屬性時,預先定義的清單中僅提供標準的 svn: 屬性。任何其他屬性名稱都必須手動輸入。

  • 無法使用儲存庫瀏覽器以遞迴方式設定或刪除屬性。

  • 當使用儲存庫瀏覽器新增子資料夾時,專案屬性不會自動傳播。

  • tsvn:autoprops 不會在使用儲存庫瀏覽器新增的檔案上設定屬性。

注意

雖然 TortoiseSVN 的專案屬性非常有用,但它們僅適用於 TortoiseSVN,並且有些僅適用於較新版本的 TortoiseSVN。如果參與您專案的人員使用各種 Subversion 用戶端,或可能使用舊版本的 TortoiseSVN,您可能需要使用儲存庫勾點來強制執行專案原則。專案屬性只能協助實作原則,而不能強制執行它。

屬性編輯器

某些屬性必須使用特定的值,或以特定的方式格式化,才能用於自動化。為了幫助正確格式化,TortoiseSVN 為某些特定屬性提供了編輯對話方塊,這些對話方塊顯示了可能的值或將屬性分解為其個別組件。

外部內容

圖 4.44。 svn:externals 屬性頁面

svn:externals property page


svn:externals 屬性可用於從同一個儲存庫或完全不同的儲存庫中提取其他專案,如名為「外部項目」的章節中所述。

您需要定義外部資料夾取出為哪個子資料夾的名稱,以及外部項目的 Subversion URL。您可以從其 HEAD 修訂版本取出外部項目,因此當儲存庫中的外部項目變更時,您的工作副本將在更新時收到這些變更。但是,如果您希望外部項目參考特定的穩定點,則可以指定要使用的特定修訂版本。在這種情況下,您可能還想將相同的修訂版本指定為釘住修訂版本。如果外部項目在未來某個時間點重新命名,則 Subversion 將無法更新您工作副本中的此項目。透過指定釘住修訂版本,您可以告訴 Subversion 尋找在釘住修訂版本而不是 HEAD 具有該名稱的項目。

尋找 HEAD 修訂版本 按鈕會擷取每個外部 URL 的 HEAD 修訂版本,並在最右欄中顯示該 HEAD 修訂版本。在知道 HEAD 修訂版本後,簡單地在外部項目上按一下滑鼠右鍵,即可讓您將選取的外部項目釘住到其明確的 HEAD 修訂版本的命令。如果尚不知道 HEAD 修訂版本,則右鍵按一下命令將首先擷取 HEAD 修訂版本。

SVN 關鍵字

圖 4.45。 svn:keywords 屬性頁面

svn:keywords property page


選取您希望在檔案中展開的關鍵字。

EOL 樣式

圖 4.46。 svn:eol-style 屬性頁面

svn:eol-style property page


選取您想要使用的行尾樣式,TortoiseSVN 將使用正確的屬性值。

問題追蹤器整合

圖 4.47。 tsvn:bugtraq 屬性頁面

tsvn:bugtraq property page


記錄訊息大小

圖 4.48。 記錄訊息大小屬性頁面

Size of log messages property page


這 3 個屬性控制記錄訊息的格式。前 2 個屬性會停用提交或鎖定對話方塊中的 確定,直到訊息達到最小長度。邊框位置會在給定的欄寬處顯示一個標記,作為對記錄訊息寬度有限制的專案的指南。將值設定為零將刪除該屬性。

專案語言

圖 4.49。 語言屬性頁面

Language property page


選擇要在提交對話方塊中用於拼字檢查記錄訊息的語言。當您在記錄訊息窗格中按一下滑鼠右鍵並選取 貼上檔案清單 時,檔案清單核取方塊會生效。預設情況下,Subversion 狀態將以您的本機語言顯示。勾選此方塊後,狀態始終以英文顯示,適用於需要僅限英文記錄訊息的專案。

MIME 類型

圖 4.50。 svn:mime-type 屬性頁面

svn:mime-type property page


svn:needs-lock

圖 4.51。 svn:needs-lock 屬性頁面

svn:needs-lock property page


此屬性僅控制是否在工作副本中未持有檔案的鎖定時,將檔案取出為唯讀。

svn:executable

圖 4.52。 svn:executable 屬性頁面

svn:executable property page


此屬性控制在 Unix/Linux 系統上取出檔案時是否給予檔案可執行狀態。它對 Windows 取出沒有影響。

合併記錄訊息範本

每當將修訂版本合併到工作副本時,TortoiseSVN 都會從所有合併的修訂版本產生記錄訊息。然後可以從提交對話方塊中的 最近訊息 按鈕取得這些訊息。

您可以使用以下屬性自訂產生的訊息

圖 4.53。 屬性對話方塊合併記錄訊息範本

Property dialog merge log message templates


tsvn:mergelogtemplatetitle, tsvn:mergelogtemplatereversetitle

此屬性指定產生的記錄訊息的第一部分。可以使用以下關鍵字

{revisions}

合併的修訂版本的逗號分隔清單,例如 3, 5, 6, 7

{revisionsr}

類似 {revisions},但每個修訂版本前面都有一個 r,例如 r3, r5, r6, r7

{revrange}

合併的修訂版本的逗號分隔清單,如果可能,則分組為範圍,例如 3, 5-7

{mergeurl}

合併的來源 URL,即修訂版本從何處合併。

此字串的預設值為 Merged revision(s) {revrange} from {mergeurl}:,結尾有一個換行符號。

tsvn:mergelogtemplatemsg

此屬性指定每個合併的修訂版本的文字應如何顯示。可以使用以下關鍵字

{msg}

合併的修訂版本的記錄訊息,與輸入時相同。

{msgoneline}

類似 {msg},但所有換行符號都替換為空格,以便整個記錄訊息顯示在單行中。

{author}

合併的修訂版本的作者。

{rev}

合併的修訂版本本身。

{bugids}

合併的修訂版本的錯誤 ID(如果有)。

tsvn:mergelogtemplatemsgtitlebottom

此屬性指定以 tsvn:mergelogtemplatetitletsvn:mergelogtemplatereversetitle 指定的標題字串的位置。如果屬性設定為 yestrue,則標題字串會附加在底部而不是頂部。

重要

這僅在合併的修訂版本已在記錄快取中時才有效。如果您已停用記錄快取,或在合併之前未先顯示記錄,則產生的訊息將不包含有關合併的修訂版本的任何資訊。

TortoiseSVN 首頁