Git 存储库中.gitignore 文件中的/dir
和/dir/
有区别吗?
以下有何不同?
/dir
/dir/
/dir/*
最佳答案
是的,这些规则是不同的。
/dir
将匹配文件、目录、链接、任何名为dir
的内容
/dir/
将匹配 仅 名为dir
的目录
/dir/*
将匹配所有文件、目录和里面的任何其他内容 名为dir
的目录(但不是dir
目录本身)。
/dir
、/dir/
和 /dir/*
是不等价的。区别
在使用覆盖规则时非常清晰,比如著名的 !.gitkeep
绕过跟踪空目录的限制。认为
文件 dir/.gitkeep
- 使用
/dir
和/dir/
,Git 甚至不会查看目录内部 所以.gitkeep
不会被看到。 - 使用
/dir/*
,文件会被Git和目录检测到 如果这个.gitkeep
被提交,将被保留,因为规则 不适用于目录本身,仅适用于其内容。
观察:上面提到的所有规则都锚定在当前目录
(.gitignore
所在的地方),因为 /
前缀。
如果没有前缀,规则不仅适用于该特定目录,还适用于子目录或存储库中的任何地方,
如果 .gitignore
位于根级别。
关于git - .gitignore 规则之间有和没有尾部斜杠的区别,如/dir 和/dir/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17888695/