我想忽略具有特定扩展名的所有文件(例如* .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
没用。
来源
我访问的许多网站都专注于如何排除文件。
答案 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
,即使用户试图忽略忽略(用户可以自由做)。