Mercurial的.hgignore中glob语法以/开头的匹配规则不生效怎么办
Mercurial .hgignore glob规则相关说明
Mercurial 的 syntax: glob 模式下确实不支持以/开头的锚定规则,这是它和 Git .gitignore 规则的核心差异之一:
- Git 中
/开头的glob规则用来锚定仓库根目录,但Mercurial的默认glob语法没有该设计,所有glob模式默认对全路径的任意位置做匹配,开头额外加/反而会导致匹配逻辑异常,无法命中预期路径。 - 如果你需要实现锚定仓库根目录的匹配效果,不要使用默认的
glob语法,改用官方提供的syntax: rootglob声明即可,该模式下的规则会默认从仓库根目录开始匹配,和Git中带开头/的glob规则效果完全等价。
你可以根据自己的需求选择合适的处理方案:
- 如果你不需要区分根目录和子目录的同名路径,当前删除所有规则开头
/、保留syntax: glob的方案完全可用,适合绝大多数通用忽略场景,比如vendor/就可以匹配所有层级目录下的vendor文件夹。 - 如果你需要保留根目录匹配的逻辑,比如只想忽略根目录的
vendor/、不想忽略子目录下的app/vendor/,直接把头部的syntax: glob改成syntax: rootglob即可,原来带/开头的规则无需修改就能正常生效。
如果你的规则中同时存在两种匹配需求,也可以在.hgignore中多次切换语法声明,示例如下:
syntax: glob # 匹配所有层级目录下的日志文件 *.log # 匹配所有层级目录下的缓存文件夹 cache/ syntax: rootglob # 仅匹配根目录下的依赖文件夹 /vendor/ # 仅匹配根目录下的本地配置文件 /.env
内容的提问来源于stack exchange,提问作者PhoneixS
相关产品推荐
相关产品推荐

