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

Jon*_*han 20 mercurial file-extension hgignore

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

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

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

syntax: glob
*.suo
Run Code Online (Sandbox Code Playgroud)

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

我在这做错了什么?

Joe*_*ant 26

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

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

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

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

再次,当你运行hg status并显示一个.suo文件时,该行的开头是什么单个字符?它是一个M,A,R,!?性格吗?它之后的路径是什么?


Nic*_*ges 7

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
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

.*\.o$
Run Code Online (Sandbox Code Playgroud)

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