SVN 檢出檔案
對於一些大工程, 整個 svn 倉庫檔案過大(動輒幾十個G的都有),不想把整個 checkout 下來,但是又想維持整個目錄結構以方便後續使用,那麼可以使用Subversion1.5
之後的--depth
引數來只 checkout 需要的子目錄.
如果只想把 svn 倉庫裡面某個檔案 checkout 到本地, 不想 checkout 整個目錄, 如何操作呢?
實施
假設需要 checkout 出來的檔案是ReadMe.md
, 其 svn 地址是:http://svn.xxx.com/path/ReadMe.md
,其上級目錄的遠端地址是http://svn.xxx.com/path
.
注意:以下出現svn co
就是svn checkout
的縮寫.
方案一
大部分人都會在第一時間想到如下的操作:
svn co http://svn.xxx.com/path/ReadMe.md
實際上這樣操作會報錯的, 報錯資訊大概意思是不可以 checkout 一個檔案, 只能 checkout 目錄
。
所以,該方案不可行。
方案二
第一步: checkout 目錄
svn co --depth=empty http://svn.xxx.com/path/ ./
./
表示當前目錄,--depth=empty
表示檢出空目錄。
第二步: 更新檔案
svn up ReadMe.md
這裡直接 svn up 就可以將你需要的檔案 checkout 出來了。
修改檔案後, 也可以直接提交到 svn 倉庫. 使用如下命令:
svn ci ReadMe.md -m "update."
方案三
使用svn export
命令將檔案匯出,然後將svn import
命令匯入檔案到 svn 倉庫。
一般臨時想 checkout 一個檔案,就會使用方案三
, 比較正式的操作,我會選擇方案二
,因為方案二
這樣既可在不增加磁碟大小的情況下保持 svn 倉庫的目錄結構,又可以任意 checkout 檔案。
稀疏目錄
上面的方案二
,其實就是 svn 的一種稀疏檢出的操作。
Subversion 1.5 開始支援稀疏檢出,允許對目錄設定深度(depth)。
關於 depth 幾個引數的含義:
–depth empty:只包含目錄自身,不包含目錄下的任何檔案和子目錄。
–depth files:包含目錄和目錄下的檔案,不包含子目錄。
–depth immediates:包含目錄和目錄下的檔案及子目錄。但不對子目錄遞迴。
–depth infinity:這是預設的,包含整個目錄樹。
使用格式如下:
svn checkout URL --depth empty|files|immediates|infinity
或者
svn checkout URL --depth=empty|files|immediates|infinity