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

wha*_*ley 32 svn svnignore

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

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

你的意见?

tom*_*mka 18

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

*[!j][!a][!v][!a]
*.java?*
Run Code Online (Sandbox Code Playgroud)

  • 我实际上在那天在IRC上询问了jcscoobyrs(谁在OSX上管理svn包),这导致他发布到ideaspark.org.我在对已接受答案的评论中引用它.只是表明无论stackoverflow.com多么棒,它仍然无法与IRC上的项目提交者交谈. (4认同)

mko*_*ler 12

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

  • ? - 匹配任何单个字符
  • * - 匹配任何字符串,包括空字符串
  • [- 开始以字符类定义终止],用于匹配字符子集

这里已经提出了类似的问题.


Bil*_*nch 7

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

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

# 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.
Run Code Online (Sandbox Code Playgroud)


Nux*_*Nux 5

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

*[!a][!p][!k]
*a[!p][!k]
*ap[!k]
Run Code Online (Sandbox Code Playgroud)

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