如何使mercurial忽略任何扩展名为.xxx的文件

时间:2011-05-20 03:28:46

标签: mercurial file-extension hgignore

我希望Mercurial忽略具有特定扩展名的任何文件。

例如,我想忽略扩展名为.SUO的文件。 (不需要版本控制Visual Studio用户设置。)

所以我将.hgignore文件改为:

syntax: glob
*.suo

但是,这没有效果,Mercurial仍然会看到我的.suo文件。

我在这里做错了什么?

4 个答案:

答案 0 :(得分:26)

如果在更改.hgignore文件之前运行hg status,.suo文件前面有?,那么现在应该忽略它。如果还有其他内容(例如MA),则它已被存储库跟踪,并且不会神奇地停止跟踪。在这种情况下,您需要对文件执行hg remove以删除它,并让hg停止跟踪它,或者只是对其执行hg forget以使hg停止跟踪它但保留文件。两者之后都应该提交。

如果路径与.hgignore文件中的模式匹配,那么将从状态列表中省略的唯一文件是未跟踪的文件。省略被跟踪的文件是没有意义的,因为你永远不会看到它是否被修改,添加或删除。

编辑:Mercurial只跟踪文件(你无法跟踪它们的空目录),但.hgignore中的模式只是针对文件路径的字符串相对于根目录运行库。运行hg status时显示的相对路径非常相同。所以它确实有效,你说你希望它工作,因为以下行是我自己的.hgignore文件的标准部分:

syntax: glob
*\obj\*
*\bin\*
*.csproj.user
*.suo

同样,当您运行hg status并显示.suo文件时,该行的开头有哪个单个字符?是MAR!还是?字符?它之后的路径是什么?

答案 1 :(得分:6)

Mercurial使用名为.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

这样,它确保即使由于某种原因扩展的情况发生变化,它仍然会被忽略。

答案 2 :(得分:5)

忽略/排除扩展名为.o的文件的示例:

.*\.o$
对于.suo扩展名,

应转换为.*\.suo$ 我已成功使用此方法

答案 3 :(得分:2)

检查.hgignore文件的位置,并确保它位于$ HOME或项目根文件夹中。检查扩展的CASE(vs case)。我怀疑模式匹配是否不区分大小写。

编辑:测试,模式匹配不区分大小写。因此,如果要忽略扩展名为“.SUO”的文件,请添加“* .SUO”。