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

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

  • 相关阅读:
    常用分页插件
    sessionStorage二种存值取值的方法
    $(this).index()与$(obj).index(this)的区别
    每次移1px的无缝轮播图
    为什么全局变量在赋值之前调用会报错
    Number()、parseInt()和parseFloat()的区别
    JSON.parse()与JSON.stringify()
    HDU
    出现负数的01背包问题
    HDU
  • 原文地址:https://www.cnblogs.com/lixiuran/p/5079086.html
Copyright © 2020-2023  润新知