Subversion假定你想要整個目錄樹。有一種方法做稀疏檢出,但它是排序的箍通過機制跳躍:
首先,檢出的操作和設置--depth
來立即數:
$ svn co --depth=immediates svn://localhost/myproject/trunk myproject-trunk
這將簽出的所有文件和立即在根目錄下的目錄。
接下來,你可以使用所有種類的shell腳本魔法與--set-depth
標誌更新只有那些你想要的目錄:
$ shopt -s extglob #Needed on BASH, but not Kornshell
$ svn co --depth=immediates $REPO_URL
$ svn up --set-depth=infinity !(foo|frob)
上面會做所有的目錄樹的結賬除了foo
和frob
。
你也可以用find
做類似的事情。
問題是Subversion非常簡單,並且被設計成這樣。在其他版本控制系統(如Perforce和ClearCase)中,您可以指定要檢出的內容,並在Perforce中指定要如何檢出。
但是,這要求您設置一個視圖這使得使用這些版本控制系統變得非常複雜得多。我喜歡Perforce。它快速且功能強大,但開發者因爲需要意見而討厭它。對他們來說,它增加了一些複雜性,但並沒有給他們帶來太多的好處。他們很少需要做稀疏結賬。
如果這是您的Subversion存儲庫的常見問題,您可能需要重新考慮您的佈局以使其更便利。這在Subversion中並不難,因爲整個存儲庫只是一個包含分支和標籤的文件樹。我們曾多次決定放棄中繼並將其替換爲特定的分支,或者重新命名和重構我們的存儲庫以使其更易於使用。
只要確保與開發人員協調任何大規模重組。如果你移動他們正在處理的目錄樹,他們會突然發現他們不能提交他們的改變(大多數情況下,他們可以做一個svn switch --relocate
來解決這個問題。但是,我的經驗是,開發者寧願檢查在他們的東西,並開始一個乾淨的結帳。
如果我正確理解你,這可以歸結爲從短黑名單(使用Unix工具箱)創建長白名單,然後讓svn工作在白名單,對嗎? – Jens
@Jens這幾乎是它。我想可能[changelists](http://svnbook.red-bean.com/en/1.7/svn.advanced.changelists.html)可能會有幫助,但它們只適用於文件而不適用於目錄。 –
我相信第二個svn命令應該是更新,而不是結帳。正確?這是現在的一箇舊的答案,所以也許有些改變。 – Pianosaurus