在linux中,*.c只会匹配当前目录下的.c文件。如果您还想匹配子目录中的内容,则需要 **/*.c。但在 gitignore 中,*.c 会忽略任何级别目录中的所有 c 文件。
但是,在 gitignore 中,d/*.c 只适用于 ./d/*.c。它不适用于更深层次的目录,例如 a/b/d/*.c
那么这里的实际规则是什么?为什么 d/*.c 不递归地应用于所有子目录,而 *.c 却可以?
我在下面附上的官方文档中有一个示例,但我什至不明白这个示例:
“例如,模式 doc/frotz/ 匹配 doc/frotz 目录,但不匹配 /doc/frotz 目录;但是 frotz/ 匹配 frotz 和 a/frotz 目录(所有路径都是相对于 .gitignore 文件) .”
如果您查看文档,您可以看到以下内容:
如果模式的开头或中间(或两者)有分隔符,则该模式相对于特定
文件本身的目录级别。否则,该模式也可能在低于.gitignore
级别的任何级别上匹配。.gitignore
还有你的例子
例如,模式
匹配doc/frotz/
目录,但不匹配doc/frotz
目录;然而a/doc/frotz
匹配 frotz 和frotz/
这是一个目录(所有路径都是相对于 .gitignore 文件)。a/frotz
因此,只要模式开头或模式内没有
/
,它就会递归匹配。然而,末尾的斜杠与是否递归无关。