硬廣:《SVN與TortoiseSVN實戰》系列已經寫了六篇,本系列結合TortoiseSVN對SVN中容易被忽視的部分進行了詳解,預計再用三、四篇來結束這個系列。
本篇詳解一下SVN的屬性,屬性可以算的上是SVN中的奇技淫巧,像分支、標簽、補丁應該在項目中屬於標配,而屬性則往往應用較少,但是充分的了解對合理使用SVN還是有幫助的。
內容概要:
1、屬性的概念和基礎操作;
2、屬性的關鍵字展開;
3、使用屬性忽略某些文件;
4、設置Mime類型;
5、自動設置屬性;
6、引用外部項目;
7、設置簽入日志限制;
8、屬性沖突;
其實屬性還有設置換行、設置可執行標志等用途,但操作簡單、用途也較小就不再此詳細,有興趣的可以自行百度。
1、屬性的概念和基礎操作
SVN不但可以存儲屬性,還可以存儲與文件相關的元數據,文件的元數據就是屬性。
屬性的操作與文件類似,也有簽入、簽出以及沖突。
屬性相當於關聯到文件KV鍵值對,鍵值是字符串,而值的類型可以是任何內容,包括二進制文件。
屬性可以分為兩種:普通屬性和特殊屬性。特殊屬性以svn開頭,TortoiseSVN在SVN的基礎上又增加了一些特殊屬性,這些屬性以:tsvn開頭。
對屬性的操作在TortoiseSVN的Properties菜單項,會打開屬性窗口對屬性進行增刪改:

另外提一點,文件和目錄的可用特殊屬性是不同的,大家可以分別在文件和目錄中使用Properties菜單,查看New按鈕彈出的屬性。
2、屬性的關鍵字展開
看名字很高大上,也比較抽象難於理解,先簡單解釋下。
關鍵字可以理解為SVN內置的一些預定義變量,如:
$Date$ 已知最后提交的日期;
$Revision$ 已知最后提交的版本;
$Author$ 已知最后提交的作者;
$HeadURL$ 此文件在版本庫中的 URL;
$Id$ 上述四個關鍵字的壓縮組合;
所謂的展開,就是在你設置屬性的文件內容中寫入這些關鍵字,當文件在簽入時,SVN會將這些關鍵字替換為實際的內容,下面實際操作下:
1、新建文本文檔,輸入以下內容:
$Date$ $Revision$
2、右鍵菜單,使用TortoiseSVN的Properties菜單項,在屬性窗口中點擊New按鈕,選擇Keywords;
3、勾選上Date和Revision;

4、簽入文件,再查看一下文件內容,會被SVN關鍵字展開為以下內容:
$Date: 2015-03-23 19:41:11 +0800 (周一, 23 三月 2015) $ $Revision: 120 $
3、使用屬性忽略某些文件
使用SVN中常常遇到這種情況,SVN目錄下某些本地生成的文件不想簽入到SVN服務器,這些文件僅用於本地操作,如C++項目中的bin和obj目錄。
如果你沒有把這些目錄和文件加入忽略列表,而是簽入到SVN,那估計你的項目組成員會遇到滿屏的問號。
可以使用忽略屬性 svn:ignore 來解決這種問題,本篇介紹的SVN機制有突破一般人理解的地方,請留意。
TortoiseSVN的菜單中已經提供了忽略操作,其實質也是通過忽略屬性來實現的,我們來解刨一下TortoiseSVN的操作:
在文件或目錄上右鍵,鼠標移動到圖中標示的忽略菜單:

這四個子菜單項分別提供了:
1、將選中的文件加入忽略列表;2、將txt后綴的文件加入到忽略列表;3、將選中的文件和子目錄中的相同文件名的文件加入忽略列表;4、不解釋,按3推理。
選擇第一項,在所在的目錄(選擇所在目錄,不要選擇文件)提交簽入,查看TortoiseSVN做了哪些修改:

可以看出來進行了兩處修改,一處是給文件的所在目錄添加了svn:ignore屬性,可以右鍵查看屬性設置,發現值為我們添加的文件的文件名。
還有一處是將剛才的文件刪除,如果你這時點OK,將本次操作簽入的話,文件將會被刪掉。當你下次再生成這個文件時,不會顯示加號,而是會顯示減號。
如果我只想加入忽略列表,而在本地保留這些文件怎么辦?
需要先將文件復制出來,然后提交簽入,簽入后再將文件復制回來,真的就只有這一種方式。
如果你想加入忽略列表里的文件是剛生成的,這時候直接加入到忽略列表里,可以避免剛才的刪除、復制操作。
你也可以手動在目錄上添加svn:ignore屬性來忽略該目錄下的文件,但如果文件沒有在SVN上刪除,操作依然不會有效。
總結一下:你不可能保持一個添加到忽略列表里的文件在SVN上存在。
篇幅所限,其他幾個知識點另起一篇來寫。
記錄,為更好的自己!
