首页 文章

使用svn:ignore忽略除某些文件之外的所有内容

提问于
浏览
29

使用svn:ignore属性,有没有一种方法可以根据我不想忽略的模式指定我想要忽略的内容?换句话说,我想忽略除了.xyz结尾的文件之外的所有内容 . 我该怎么做呢(如果可能的话)?

我探索的一个选项是提交我想要版本化的所有内容,然后将目录上的svn:ignore属性设置为'',这意味着没有其他文件,但我已经提交的内容将被版本化 . 这是我能想到的最好的,但它感觉很脏,如果我确实需要添加另一个文件作为版本,我必须进行多次提交...一个删除svn:ignore属性,另一个添加/提交新文件,然后第三个更改svn:忽略回'' .

你的意见?

6 回答

  • 5

    不,没有你所描述的独家匹配 . This article列出了模式匹配的可能性 . 它仅限于:

    • ? - 匹配任何单个字符

    • * - 匹配任何字符串,包括空字符串

    • [ - 开始 ] 终止的字符类定义,用于匹配字符子集

    有人问过类似的问题here .

  • 7

    看看http://www.thoughtspark.org/node/38 . 显然你可以在字符组中使用"!"来否定它的含义 . 因此,如果要忽略除.java结尾的文件之外的所有内容,请将以下模式设置为svn:ignore:

    *[!j][!a][!v][!a]
    *.java?*
    
  • 17

    这是我所知道的唯一解决方案 . 您可以显式添加文件,即使它们被忽略也是如此 .

    您需要在所有子目录上添加该设置 .

    # Create a repository with property ignore *
    
    [wlynch@orange ~] cd /tmp
    [wlynch@orange /tmp] svnadmin create foo
    [wlynch@orange /tmp] svn co file:///tmp/foo co
    Checked out revision 0.
    [wlynch@orange /tmp] cd co
    [wlynch@orange co] svn propset svn:ignore \* .
    property 'svn:ignore' set on '.'
    
    # Create 3 files
    
    [wlynch@orange co] touch a
    [wlynch@orange co] touch b
    [wlynch@orange co] touch c
    
    # We can add all 3 of these files in one transaction
    
    [wlynch@orange co] svn status
    M     .
    [wlynch@orange co] svn add a
    A         a
    [wlynch@orange co] svn add b
    A         b
    [wlynch@orange co] svn status
    M     .
    A      a
    A      b
    [wlynch@orange co] svn add c
    A         c
    [wlynch@orange co] svn ci
    Sending        .
    Adding         a
    Adding         b
    Adding         c
    Transmitting file data ...
    Committed revision 1.
    
  • 0

    这是我在 svn:ignore 文件夹上设置的 svn:ignore 属性,以匹配除apk文件之外的所有内容:

    *[!a][!p][!k]
    *a[!p][!k]
    *ap[!k]
    

    如果有完整的RegExp支持,你可以使用负面的lookbehind,但这很少实现(例如不在JavaScript中)并且效率低下 .

  • 12

    以下对我有用,并摆脱了其他建议的一些怪癖 .

    *.?
    *.??
    *.???
    *.[!j]???
    *.?[!a]??
    *.??[!v]?
    *.???[!a]
    *.?????*
    

    逐行解释如下:

    • 忽略具有单字母扩展名的所有内容

    • 忽略具有两个字母扩展名的所有内容

    • 忽略具有三个字母扩展名的所有内容

    • 忽略所有具有四个字母的扩展名,其中扩展名的第一个字母不是j

    • 忽略所有具有四个字母的扩展名,其中扩展名的第二个字母不是a

    • 忽略所有具有四个字母的扩展名,其中扩展名的第三个字母不是v

    • 忽略所有具有四个字母的扩展名,其中扩展名的第四个字母不是a

    • 忽略具有五个字母或更多内容的所有内容

    限制:

    • 这也将阻止以.java结尾的目录

    • 不幸的是我无法忽略没有扩展名的文件,因为这也会阻止目录 .

  • 4

    好吧,我不知道我是否错过了什么,但你可以使用你想要的任何模式:

    svn propset svn:ignore "*~" .
    

    您可以查看:

    svn propget svn:ignore .
    

    另一种方法是使用别名/脚本,可以在提交时进行复杂的解析 .

    我发现自己使用的最佳解决方案是将源文件的版本化树与构建树完全分离 . 这样,您就不会在目录的版本化树中生成内容 . 然后,您只能使用 svn:ignore 来忽略文本编辑器生成的简单伪像 .

    编辑:

    对不起我第一个解决方案的错误,我误读了你的帖子 . 即使不完全符合你的要求,其他两种方式似乎也很相关......

相关问题