linux svn 命令行 checkout 忽略目錄

不少時候,你的svn repo(假定project)很大(這裏指包括全部tags和branches),可是其實你真正須要的卻只有一兩個(好比說trunk,以及和trunk平級的install目錄,同時install目錄和trunk目錄有着這樣活那樣的聯繫),這時你就但願在svn co的時候是co整個project而且忽略你不想要的目錄。固然,你大可沒必要co整個project,而單獨co你想要的目錄就好了。可是,從SCM的角度出發,你不能夠強行改變用戶的使用習慣,不排除就有這麼些人喜歡這樣操做,尤爲是對於那些喜歡用命令行的人而言。windows

可能我這麼說,你們沒有什麼概念,我給你們舉個例子,你們應該就知道這是一種什麼狀況了:服務器

你們都知道,在一個項目的SCM管理中,每每要求開發者經過打tag的方式來進行版本發佈,tag存在於tags目錄,tags目錄每每與trunk/branches目錄平級,這裏還有一個install目錄,以下:svn

  1. project/   
  2. |-- branches   
  3. |   |-- branch1   
  4. |   |-- branch2   
  5. |   `-- branch3   
  6. |-- install   
  7. |-- tags   
  8. |   |-- tag1   
  9. |   |-- tag2   
  10. |   |-- tag3   
  11. |   |-- tag4   
  12. |   `-- tag5   
  13. `-- trunk   
  14.     `-- src  

tags目錄雖然是一個標籤副本,但在checkout的過程當中,是會針對一份完整代碼的,所以不少人都不但願在本地的working copy中保留這個tags目錄。遺憾的是,svn co命令並無這樣一個選項去忽略這個目錄。url

事實上,我也遇到了這個問題,在我看了不少help以後,終於找到了辦法。具體以下(分兩種狀況討論):spa

 I. 本地保存有完整的Working Copy狀況:

換句話說就是,你已經將svn中完整的repos/directories checkout到本地了(本地已經有一份你在服務器端的完整Copy了)。這時,你只須要運行如下命令將tags以及branches目錄排除在svn up列表:命令行

  1. # svn update --set-depth=exclude tags branches
  2. D    tags
  3. D    branches 

選項後面能夠跟多個目錄,這樣,就在你當前的working copy中成功的將tags和branches目錄排除掉了,在你下一次的update中,就不會去理會這兩個目錄了,但同時有保證了你的project是在version control下的,所以不須要每次都逐個進入目錄進行svn up了。ip

 II. 進行一次全新的忽略目錄Checkout操做:

這種狀況若是是在windows下,就顯得很是簡單,你只須要使用烏龜客戶端的「Choose Item」按鈕。開發

可是若是是在命令行的狀況下,那就要稍微複雜一點了,請按照以下操做:get

1. 首先將目錄樹checkout到本地:it

  1. [root]@[Fck_with_U]:[~/temp]->>svn co http://svn_test_url.com/test_dir my_checkout --depth immediates   
  2. A    my_checkout/backup   
  3. A    my_checkout/doc   
  4. A    my_checkout/scripts   
  5. A    my_checkout/src   
  6. A    my_checkout/data   
  7. A    my_checkout/tool   
  8. Checked out revision 736189.  

2. 將你不想co的目錄排除在外(好比這裏我想排除backup, data, doc, src, tool這五個目錄,只想checkout scripts目錄):

  1. [root]@[Fck_with_U]:[~/temp]->>cd my_checkout/   
  2. [root]@[Fck_with_U]:[~/temp/my_checkout]->>ls   
  3. backup  data  doc  scripts  src  tool   
  4. [root]@[Fck_with_U]:[~/temp/my_checkout]->>svn up --set-depth=exclude backup data doc src tool   
  5. D         backup   
  6. D         data   
  7. D         doc   
  8. D         src   
  9. D         tool  

3. 更新你想要的scripts目錄:

  1. [root]@[Fck_with_U]:[~/temp/my_checkout]->>svn update --set-depth infinity scripts/   
  2. A    scripts/trunk   
  3. A    scripts/trunk/test   
  4. ...........  

這樣,目的就達到了!說煩也不煩!

相關文章
相關標籤/搜索