为什么Mercurial会忽略我的一些文件?

为什么Mercurial会忽略我的一些文件?,mercurial,Mercurial,运行“hg init”和“hg add”创建新的Mercurial存储库并添加文件后,我发现有相当多的文件没有被跟踪(它们显示为“hg status-I”),但似乎与我的.hgignore文件中的任何模式都不匹配,所以我看不出问题所在。以下是.hgignore文件: # Eclipse project files .classpath .project .settings/ # IntelliJ project files \.iml \.ipr \.iws .idea/ out # Gra

运行“hg init”和“hg add”创建新的Mercurial存储库并添加文件后,我发现有相当多的文件没有被跟踪(它们显示为“hg status-I”),但似乎与我的.hgignore文件中的任何模式都不匹配,所以我看不出问题所在。以下是.hgignore文件:

# Eclipse project files
.classpath
.project
.settings/

# IntelliJ project files
\.iml
\.ipr
\.iws
.idea/
out

# Grails files and dirs that should not be versioned
target
web-app/WEB-INF/classes
web-app/WEB-INF/tld/c.tld
web-app/WEB-INF/tld/fmt.tld
stacktrace.log
plugin.xml
devDb.*
prodDb.*

# Mac OS/X finder files
.DS_Store

oldhg/

例如,“/grails app/views/layouts”中的所有文件都被忽略,但我在.hgignore文件中看不到任何可能导致此问题的文件。我错过了什么?如何强制不忽略这些文件?

字符串
out
与包含该字符串的任何内容匹配,包括
布局/
。如果您希望它只匹配名称的开头或结尾,则需要使用
^
$
锚定它!我知道这很简单!因此,为了确保忽略“out”目录中的所有内容,我可能会使用
^out$
?Mercurial不会忽略目录,它会忽略文件
^out$
将匹配存储库根目录中名为
out
的文件(其他内容都是
out/something
,与
^out$
不匹配)。如果要忽略该目录,请尝试
^out/
。啊,好的。我想我过去有点困惑,没有意识到.hgignore文件有两种不同的语法,并且使用了一些语法错误的示例。我认为除非指定,否则语法是regex,对吗?因此,如果我想忽略名为
out
的顶级目录中的所有内容,我会使用
^out/
。是这样吗?根据,regex是默认值。我建议使用
语法:glob
,只要您拥有现代Mercurial和/或不受相当旧的Mercurial性能差异的困扰。全局匹配更容易让人们思考,并且隐式地锚定在名称组件上。