linux下svn的co如何排除目錄


某些原因想在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目錄,如下:

  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命令並沒有這樣一個選項去忽略這個目錄。

事實上,我也遇到了這個問題,在我看了很多help之后,終於找到了辦法。具體如下(分兩種情況討論):

 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了。

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

這種情況如果是在windows下,就顯得非常簡單,你只需要使用烏龜客戶端的“Choose Item”按鈕。

但是如果是在命令行的情況下,那就要稍微復雜一點了,請按照如下操作:

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

  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. ...........  

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM