gitignore 中的递归规则是如何工作的

问题描述 投票:0回答:1

在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 文件) .”

git github glob gitignore
1个回答
1
投票

如果您查看文档,您可以看到以下内容:

如果模式的开头或中间(或两者)有分隔符,则该模式相对于特定

.gitignore
文件本身的目录级别。否则,该模式也可能在低于
.gitignore
级别的任何级别上匹配。

还有你的例子

例如,模式

doc/frotz/
匹配
doc/frotz
目录,但不匹配
a/doc/frotz
目录;然而
frotz/
匹配 frotz 和
a/frotz
这是一个目录(所有路径都是相对于 .gitignore 文件)。

因此,只要模式开头或模式内没有

/
,它就会递归匹配。然而,末尾的斜杠与是否递归无关。

© www.soinside.com 2019 - 2024. All rights reserved.