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
的缩写.
方案一
大部分人都会在第一时间想到如下的操作:
1 | svn co http://svn.xxx.com/path/ReadMe.md |
实际上这样操作会报错的, 报错信息大概意思是 不可以 checkout 一个文件, 只能 checkout 目录
。
所以,该方案不可行。
方案二
第一步: checkout 目录
1 | svn co --depth=empty http://svn.xxx.com/path/ ./ |
./
表示当前目录,--depth=empty
表示检出空目录。
第二步: 更新文件
1 | svn up ReadMe.md |
这里直接 svn up 就可以将你需要的文件 checkout 出来了。
修改文件后, 也可以直接提交到 svn 仓库. 使用如下命令:
1 | 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:这是默认的,包含整个目录树。
使用格式如下:
1 | svn checkout URL --depth empty|files|immediates|infinity |
或者
1 | svn checkout URL --depth=empty|files|immediates|infinity |