某些原因想在svn co的時候排除某些目錄,可以繞個圈子,分三步來完成:
co外層目錄:
svn checkout --depth empty $URL [$LOCATION]
完成之后,會有一個只包含空目錄的根目錄
設置忽略目錄:
cd $LOCATION
svn up --set-depth exclude <$DIR_TO_EXCLUDE>
這樣svn會提示被忽略的目錄標記為D,然后文件系統上也看不見了
更新剩余文件
svn up --set-depth infinity *
這樣其他目錄會被重新遞歸的更新,被忽略的目錄不會更新,即使后面有人執行svn up,也無法更新被忽略的文件。
-----
--depth ARG : limit operation by depth ARG ('empty', 'files','immediates', or 'infinity')
empty:檢出一個空項目
files:只檢出文件
immediates:只檢出文件夾
infinity:遞歸檢出文件或文件夾
==========================================================
http://alanland.iteye.com/blog/1897749 [以下內容摘抄與這篇文章]
很多時候,你的svn repo(假定project)很大(這里指包括所有tags和branches),但是其實你真正需要的卻只有一兩個(比如說trunk,以及和trunk平級的install目錄,同時install目錄和trunk目錄有着這樣活那樣的聯系),這時你就希望在svn co的時候是co整個project並且忽略你不想要的目錄。當然,你大可不必co整個project,而單獨co你想要的目錄就行了。但是,從SCM的角度出發,你不可以強行改變用戶的使用習慣,不排除就有這么些人喜歡這樣操作,尤其是對於那些喜歡用命令行的人而言。
可能我這么說,大家沒有什么概念,我給大家舉個例子,大家應該就知道這是一種什么情況了:
大家都知道,在一個項目的SCM管理中,往往要求開發者通過打tag的方式來進行版本發布,tag存在於tags目錄,tags目錄往往與trunk/branches目錄平級,這里還有一個install目錄,如下:
- project/
- |-- branches
- | |-- branch1
- | |-- branch2
- | `-- branch3
- |-- install
- |-- tags
- | |-- tag1
- | |-- tag2
- | |-- tag3
- | |-- tag4
- | `-- tag5
- `-- trunk
- `-- src
tags目錄雖然是一個標簽副本,但在checkout的過程中,是會針對一份完整代碼的,因此很多人都不希望在本地的working copy中保留這個tags目錄。遺憾的是,svn co命令並沒有這樣一個選項去忽略這個目錄。
事實上,我也遇到了這個問題,在我看了很多help之后,終於找到了辦法。具體如下(分兩種情況討論):
I. 本地保存有完整的Working Copy情況:
換句話說就是,你已經將svn中完整的repos/directories checkout到本地了(本地已經有一份你在服務器端的完整Copy了)。這時,你只需要運行以下命令將tags以及branches目錄排除在svn up列表:
- # svn update --set-depth=exclude tags branches
- D tags
- D branches
選項后面可以跟多個目錄,這樣,就在你當前的working copy中成功的將tags和branches目錄排除掉了,在你下一次的update中,就不會去理會這兩個目錄了,但同時有保證了你的project是在version control下的,因此不需要每次都逐個進入目錄進行svn up了。
II. 進行一次全新的忽略目錄Checkout操作:
這種情況如果是在windows下,就顯得非常簡單,你只需要使用烏龜客戶端的“Choose Item”按鈕。
但是如果是在命令行的情況下,那就要稍微復雜一點了,請按照如下操作:
1. 首先將目錄樹checkout到本地:
- [root]@[Fck_with_U]:[~/temp]->>svn co http://svn_test_url.com/test_dir my_checkout --depth immediates
- A my_checkout/backup
- A my_checkout/doc
- A my_checkout/scripts
- A my_checkout/src
- A my_checkout/data
- A my_checkout/tool
- Checked out revision 736189.
2. 將你不想co的目錄排除在外(比如這里我想排除backup, data, doc, src, tool這五個目錄,只想checkout scripts目錄):
- [root]@[Fck_with_U]:[~/temp]->>cd my_checkout/
- [root]@[Fck_with_U]:[~/temp/my_checkout]->>ls
- backup data doc scripts src tool
- [root]@[Fck_with_U]:[~/temp/my_checkout]->>svn up --set-depth=exclude backup data doc src tool
- D backup
- D data
- D doc
- D src
- D tool
3. 更新你想要的scripts目錄:
- [root]@[Fck_with_U]:[~/temp/my_checkout]->>svn update --set-depth infinity scripts/
- A scripts/trunk
- A scripts/trunk/test
- ...........
這樣,目的就達到了!說煩也不煩!