`
275553385
  • 浏览: 736296 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
文章分类
社区版块
存档分类
最新评论

svn --set-depth

svn 
阅读更多

 

很多时候,你的svn repo(假定project)很大(这里指包括所有tagsbranches),但是其实你真正需要的却只有一两个(比如说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中成功的将tagsbranches目录排除掉了,在你下一次的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. ...........  

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

分享到:
评论

相关推荐

    svn 回退/更新/取消至某个版本命令

    - `--set-depth`:设置工作副本的新深度。 - `-q`或`--quiet`:不打印信息或仅打印概要信息。 通过以上的介绍可以看出,SVN提供了丰富的命令集来帮助用户管理版本控制,无论是简单的撤销操作还是复杂的版本回退,...

    svn clean up失败

    - **排除特定文件**:使用`--set-depth`选项,可以设置只清理部分目录,避免因某个问题文件导致整个操作失败。 5. **求助与资源**: - 当遇到困难时,可以查阅SVN的官方文档或在线社区(如Stack Overflow)获取...

    CKeep (svn文件夹空提交报错解决方案)

    在提交后,你可以再次运行`svn update --set-depth infinity 目录名`以恢复完全的目录深度。 3. **Svn属性设置**:使用`svn propset svn:ignore -F .`命令在根目录下创建一个忽略文件,然后在该文件中列出所有需要...

    Flex Builder Plug-in and Adobe

    ### Flex Builder Plug-in and Adobe: An In-depth Exploration In the dynamic world of web development, especially in the realms of Flash and Flex, the integration between Eclipse and Flex Builder has ...

    字节跳动<Git学习手册>

    相较于传统的集中式版本控制系统(如SVN),Git具有更高的灵活性和安全性。 - **版本管理工具**:能够记录每一次的文件修改历史,用户可以轻松地回溯到任何时间点的代码状态,这对于团队协作开发尤为重要。 - **...

Global site tag (gtag.js) - Google Analytics