34

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

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

你的意见?

4

6 回答 6

19

查看使用 Subversion 的 svn:ignore property 的否定模式。显然你可以使用“!” 在字符组中否定其含义。因此,如果您想忽略除以 .java 结尾的文件之外的所有内容,请将以下模式设置为 svn:ignore:

*[!j][!a][!v][!a]
*.java?*
于 2010-10-20T13:37:39.463 回答
13

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

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

这里已经提出了一个类似的问题。

于 2009-07-16T14:16:40.900 回答
9

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

不过,您需要在所有子目录中添加该设置。

# 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.
于 2009-07-16T14:06:38.107 回答
5

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

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

如果有完整的正则表达式支持,您可以使用否定的lookbehind,但无论如何很少实现(例如,不在JavaScript 中)并且效率低下。

于 2012-12-16T14:19:37.513 回答
4

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

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

逐行解释如下:

  • 忽略所有具有单字母扩展名的内容
  • 忽略所有具有两个字母扩展名的内容
  • 忽略所有具有三个字母扩展名的内容
  • 忽略具有四个字母扩展名且扩展名的第一个字母不是 j 的所有内容
  • 忽略所有具有四个字母扩展名且扩展名的第二个字母不是
  • 忽略所有具有四个字母扩展名且扩展名的第三个字母不是 v 的内容
  • 忽略具有四个字母扩展名的所有内容,其中扩展名的第四个字母不是
  • 忽略所有具有五个或更多字母扩展名的内容

限制:

  • 这也将阻止以 .java 结尾的目录
  • 不幸的是,我无法忽略没有扩展名的文件,因为这也会阻止目录。
于 2014-01-31T10:17:41.370 回答
0

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

svn propset svn:ignore "*~" .

您可以通过以下方式检查:

svn propget svn:ignore .

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

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

编辑:

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

于 2009-07-16T14:04:26.923 回答