對於一個大的版本庫來說,本地工作目錄簽出整個目錄樹是即費時又占地兒的。
雖然可以只簽出某個子目錄樹,但有時候還是需要從根目錄簽出。
那么,怎么才能只把自己感興趣的子目錄簽出來呢?
從svn1.5版開始,提供了稀疏目錄(Sparse Directories)功能,允許對目錄設置深度(depth),
這個設置可以保存在工作目錄上,以后svn update等命令都在這個設置下工作。
有以下幾種depth可以選擇:
--depth empty:只包含目錄自身,不包含目錄下的任何文件和子目錄。
--depth files: 包含目錄和目錄下的文件,不包含子目錄。
--depth immediates: 包含目錄和目錄下的文件及子目錄。但不對子目錄遞歸。
--depth infinity: 這是默認的,包含整個目錄樹。
例如,版本庫有
trunk
branches
tags
branches下有很多子目錄,b1,b2,b3....
本地希望簽出trunk和b2,不關心b1和b3,那么可以這樣操作:
1 使用--depth immediates簽出根目錄,這樣會得到trunk,branches,tags三個空目錄。
2 使用--depth infinity簽出trunk,這樣會得到trunk整個目錄樹。
3 使用--depth immediates簽出branches,這樣會得到b1,b2,b3....等空目錄
4 使用--depth infinity簽出b2,這樣會得到b2整個目錄樹。
當執行svn update /的時候,不會把不關心的b1,b3簽出的,因為depth已經"記憶"在工作目錄上了。
當其他人向版本庫里提交了branches/bx后,可以
使用--depth immediates簽出branches,這樣工作目錄會增加bx空目錄,而不會影響b1,b2,b3...。
再使用--depth infinity簽出bx,即可。
另外,svn up有個參數--set-depth,可以修改保存在工作目錄上的depth。