0

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

svn:ignore 的合适模式是什么?

我试过的

如果我将 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

那没有用。

来源

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

4

1 回答 1

0

一句话:你不能...

但是,如果您的存储库中已经有packages.config,那么即使 svn ignore 设置*.config. 您不能忽略存储库中已有的内容。

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

[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作为奖励,即使用户试图忽略忽略(用户可以自由执行),我的预提交钩子也会禁止添加。

于 2013-07-22T01:31:26.190 回答