我希望Mercurial忽略任何具有特定扩展名的文件。
例如,我想忽略具有.SUO扩展名的文件。(没有必要对Visual Studio用户设置进行版本控制。)
所以我将我的.hgignore文件更改为:
syntax: glob
*.suo
然而,这没有任何效果,Mercurial仍然看到我的.suo文件。
我在这里做错了什么?
我希望Mercurial忽略任何具有特定扩展名的文件。
例如,我想忽略具有.SUO扩展名的文件。(没有必要对Visual Studio用户设置进行版本控制。)
所以我将我的.hgignore文件更改为:
syntax: glob
*.suo
然而,这没有任何效果,Mercurial仍然看到我的.suo文件。
我在这里做错了什么?
hg status
,.suo 文件前面有一个 ?
,则现在应该忽略它。 如果是其他任何字符(例如M
或A
),则它已经由仓库跟踪,并且不会神奇地停止被跟踪。 在这种情况下,您需要对文件执行hg remove
以删除它并使 hg 停止跟踪它,或者只需对其执行hg forget
以使 hg 停止跟踪它但保留该文件。 任何一种方法都应遵循提交。hg status
时显示给您查看的相同相对路径。因此,它确实按照您希望的方式工作,因为以下行是我自己 .hgignore 文件的标准部分:
语法:glob *\obj\* *\bin\* *.csproj.user *.suo同样,在运行
hg status
并显示.suo文件时,该行开头是什么单个字符? 是 M
、A
、R
、!
还是?
字符?它后面的路径是什么?hg remove
)等同于“forget”和文件系统删除。 - Lasse V. Karlsen.hgignore
的文件条目来确定完全忽略哪些文件。该文件通常位于存储库的根文件夹中(而不是您可能认为的.hg目录)。
您可以在此处了解更多信息:
http://www.selenic.com/mercurial/hgignore.5.html
通常,我们使用正则表达式语法确保扩展名的大小写不受影响:# use regexp syntax.
syntax: regexp
(?i)\.dcu
(?i)\.identcache
(?i)\.dof
(?i)\.dsk
(?i)\.bak
(?i)\.old
忽略/排除扩展名为 .o 的文件示例:
.*\.o$
应该将“.suo”扩展名翻译为.*\.suo$
的形式。我已经成功使用了这种方法。
检查.hgignore文件的位置,并确保它位于$HOME或项目根目录中。检查扩展名的大小写。我怀疑模式匹配是否不区分大小写。
编辑:经过测试,模式匹配是不区分大小写的。因此,如果您想忽略具有“.SUO”扩展名的文件,请添加“*.SUO”。