除了svn中的packages.config之外,忽略* .config的适当模式是什么?

时间:2013-07-21 23:05:34

标签: svn svnignore

我想忽略具有特定扩展名的所有文件(例如* .config),因为它们是生成的,除了名为“packages.config”的文件是静态的。从本质上讲,开发人员不应该意外地签入app.config,bob.config,web.config或任何其他扩展名为“.config”的文件。

svn的适当模式是什么:忽略?

我尝试了什么

如果我将svn:ignore设置为

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
*.config

然后忽略所有文件,包括packages.config。这是预料之中的。那么我想验证我可以用文件名中的包排除所有配置文件。

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
packages.config

这就是诀窍。

然而,我无法得到该模式的反转。我在互联网上搜索了一些示例,并使用"^"和另一个使用"!"找到了提及。

我试过

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
!packages.config

没有达到预期的效果。此时我意识到我显然不明白如何实现这一目标。所以我尝试添加!packages.config然后添加*.config

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
!packages.config
*.config

*.config然后!packages.config

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
*.config
!packages.config

并添加^packages.config

*.exe
*.dll
[Bb]in
[Oo]bj
[Rr]elease
[Dd]ebug
^packages.config

没用。

来源

我访问的许多网站都专注于如何排除文件。

1 个答案:

答案 0 :(得分:0)

总之:你不能......

但是,如果您的存储库中已经有packages.config,那么即使svn ignore设置为*.config,它也不会被忽略。你不能忽视存储库中已有的东西。

但是,根据您的需要,听起来您可以使用我的pre-commit hook来更好地控制您的情况。我的钩子获取控制文件中指定的规则列表。对于文件规则,与文件名称匹配的最后一条规则是它们被授予的访问权限。在您的情况下,您将有两个规则:

[FILE Configuration files must be named "packages.config"]
file = **/*.config
access = no-add
users = @ALL

[FILE Configuration files must be named "packages.config"]
file = **/packages.config
access = read-write
users = @ALL

如果有人试图将bob.config添加到存储库,我的第一条规则就生效了。 bob.config匹配*.config,该规则表示您无法添加任何以.config结尾的文件。

但是,如果有人尝试将packages.config添加到存储库,它会起作用,因为虽然packages.config与第一个规则匹配且第一个规则禁止它,但packages.config也匹配第二个规则这允许它。第二条规则胜过第一条规则。

作为奖励,我的预提交钩子将禁止添加bob.config,即使用户试图忽略忽略(用户可以自由做)。