You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitignore递归匹配规则解析:为何*.c与d/*.c表现不同?

Git Ignore 路径匹配规则解析:为什么*.c递归而d/*.c不递归?

核心匹配规则

Git Ignore的路径匹配逻辑,核心看模式里有没有包含路径分隔符/:

  • 不带/的模式:会递归匹配所有层级的文件/目录,不管路径嵌套多深
  • 带/的模式:仅匹配相对于.gitignore文件所在位置的指定层级路径,不会自动递归到更深的子目录

对应场景解释

  • 模式*.c:没有/,所以Git会在所有目录(当前目录、所有子目录、子子目录...)里查找.c文件,全部忽略
  • 模式d/*.c:包含/,这个模式的意思是「匹配当前目录下直接子文件夹d里的所有.c文件」,所以只会命中./d/*.c,不会匹配a/b/d/*.c这种嵌套在其他目录里的d文件夹内的文件

官方示例翻译与解读

例如,模式doc/frotz/匹配doc/frotz目录,但不匹配a/doc/frotz目录;而frotz/匹配frotz目录以及a/frotz目录(所有路径均相对于.gitignore文件)。

这个示例的逻辑和上面的规则完全一致:

  • doc/frotz/:带/,是明确的相对路径,只匹配.gitignore所在目录下的doc/frotz目录,不会识别嵌套在a/里的doc/frotz
  • frotz/:不带开头的/,属于递归模式,会匹配所有层级下的frotz目录——不管是当前目录下的frotz,还是子目录a/里的frotz

补充:如何递归匹配所有d目录下的.c文件

如果想要忽略所有层级目录里d文件夹下的.c文件,需要用通配符**来表示任意层级的目录,也就是模式**/d/*.c。

内容的提问来源于stack exchange,提问作者qiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 13:21:06