内容来自网络。

某些原因想在svn co的时候排除某些目录,可以绕个圈子,分三步来完成:

co外层目录:

svn checkout --depth empty URL[URL[LOCATION]

完成之后,会有一个只包含空目录的根目录

设置忽略目录:

cd LOCATIONsvnup−−set−depthexclude<LOCATIONsvnup−−set−depthexclude<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. ...........

这样,目的就达到了!说烦也不烦!

I have an SVN project with tree like this:

/project
/dir1
/subdir1
-file1
-file2
.....
-file1
-file2
.....
/dir2
-file1
-file2
.....
/dir3
/subdir1
-file1
-file2
.....
/subdir2
-file1
-file2
.....
/subdir3
-file1
-file2
.....
/subdir4
-file1
-file2
.....
/dir4
-file1
-file2
.....
-file1
-file2
I need to checkout

all files from /project
full /dir1
full /dir2
full /dir4
From /dir3 I need only /subdir1 and /subdir3
Can I checkout these files/folders using svn commandline with some kind of depth?
If so how can I do it? Can I add subdir2 to dir3 after a checkout?
How can I update working copy created this way? Will normal "svn up" command update only these folders or full update of project will be performed?

Answers
What you need is called sparse checkout.

In your case you can:

svn co --depth files file:///project project
cd project
svn up --set-depth infinity dir1 dir2 dir4
svn up --set-depth empty dir3
svn up --set-depth infinity dir3/subdir1 dir3/subdir3
Can I add subdir2 to dir3 after a checkout?

Yes: svn up --set-depth infinity dir3/subdir2

How can I update working copy created this way? Will normal "svn up" command update only these folders or full update of project will be performed?

Yes, svn up will update only these files and folders, that is update depth will be preserved.

如何使用svn命令行更新想要的目录?的更多相关文章

  1. SVN命令行更新代码

    命令列表 svn help查看帮助信息 Available subcommands: add auth blame (praise, annotate, ann) cat changelist (cl ...

  2. Linux环境SVN命令行使用经验总结(转)

    在windows机器上开发得差不多了之后,打包传送到开发机编译,在开发机上解决编译错误. [缺点] 浪费时间在打包解包,机器间传输代码. 在windows机器上开发之后,check in代码进分支,在 ...

  3. Mac SVN 命令行

    Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.10 以下是一些常用命令 1.将文件checkout到本地目录 svn checkout path(p ...

  4. [MAC] Mac下的SVN命令行

    转载自: http://www.cnblogs.com/snandy/p/4072857.html Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.1 ...

  5. 转:svn命令行操作

    原文:http://zhumeng8337797.blog.163.com/blog/static/10076891420115218821912/SVN命令行 -- ::| 分类: CVS |字号 ...

  6. Windows下SVN命令行工具使用详解

    根据我的记忆,似乎Windows 7下自自带一个svn命令行工具.如果你的机器没有,不必担心.你可以从http://subversion.tigris.org获 取subversion for win ...

  7. svn命令行批量删除和批量添加

    svn命令行批量删除和批量添加 如果使用svn的命令行,例如在linux下的终端中使用,svn的添加命令是svn add,删除命令是svn del,但是缺乏批量的操作,如果我在资源管理器中,手动添加了 ...

  8. SVN命令行笔记

    SVN命令行笔记 近期玩了一下命令行,记录如下. svn info <path> #查看文件,路径信息 svn log <path> #查看文件,路径历史记录 svn st(s ...

  9. svn命令行修改已提交的版本备注

    svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...

随机推荐

  1. Shell——数学计算

    shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法,以后用到的时候可以来看,呵呵1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1, ...

  2. Mysql group by,order by,dinstict优化

    1.order by优化 2.group by优化 3.Dinstinct 优化 1.order by优化 实现方式: 1. 根据索引字段排序,利用索引取出的数据已经是排好序的,直接返回给客户端: 2 ...

  3. linux zabbix监控服务器搭建

    搭建Zabbix监控服务器 准备运行环境(lamp) [root@zhuji1 ~]# yum -y install httpd [root@zhuji1 ~]# yum -y install php ...

  4. mysql常用基础操作语法(十一)~~字符串函数【命令行模式】

    注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数. 1.concat连接字符串: 从上图中可以看出,直接使用sele ...

  5. 【javascript】jquery jsonp跨越请求

    <html> <head> <meta charset="utf-8"> <title></title> <scr ...

  6. zTree实现地市县三级级联DAO接口

    zTree实现地市县三级级联DAO接口 ProvinceDao.java: /** * @Title:ProvinceDao.java * @Package:com.gwtjs.dao * @Desc ...

  7. Error Code: 1318. Incorrect number of arguments for PROCEDURE student.new_procedure; expected 0, got

    1.错误描述 13:58:20 call new_procedure('2000','zhangsan') Error Code: 1318. Incorrect number of argument ...

  8. 无法连接MySQL

    1.错误描述 Error No. 2003 Can't connect to MySQL Server on 'localhost' (10061) 2.错误原因       打开任务管理器,关闭了m ...

  9. 获取Filter的三种途径

    一.通过CLSID [cpp] view plaincopyprint? IBaseFilter *pF = 0; HRESULT hr = CoCreateInstance(clsid, 0, CL ...

  10. PageBase 公共基础类

    PageBase 公共基础类 using System; using System.Collections.Generic; using System.Linq; using System.Web; ...