22

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

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

所以我将 .hgignore 文件更改为:

syntax: glob
*.suo

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

我在这里做错了什么?

4

4 回答 4

27

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

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

编辑: Mercurial 只跟踪文件(你不能让它跟踪空目录),但 .hgignore 中的模式只是针对相对于存储库根目录的文件路径字符串运行。它在您运行时向您显示的相对路径完全相同hg status。所以它确实像你说的那样工作,因为以下几行是我自己的 .hgignore 文件的标准部分:

语法:glob
*\obj\*
*\bin\*
*.csproj.user
*.suo

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

于 2011-05-20T03:36:42.393 回答
8

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

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

于 2011-05-20T04:03:56.927 回答
5

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

.*\.o$

应转换.*\.suo$为 .suo 扩展名。
我已经成功使用了这个方法

于 2012-04-03T17:43:09.477 回答
2

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

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

于 2011-05-20T03:33:24.873 回答