.gitignore中'repoContent'与'**/repoContent'规则的差异是什么?
.gitignore中'repoContent'与'**/repoContent'的规则差异
首先说共性:在仓库根目录的.gitignore里写这两个规则,确实都会递归匹配所有层级下名为repoContent的文件和目录,表面效果一致。但两者在特定场景下存在明显差异:
1. 规则所在位置不同时的差异
如果把规则写在子目录的.gitignore文件中:
repoContent:只会匹配当前子目录下的repoContent(不管是文件还是目录),不会影响其他目录下的同名项。**/repoContent:依然会匹配整个仓库所有层级里的repoContent,不受当前子目录的限制。
举个例子:
假设仓库结构如下:
my-repo/ ├── repoContent ├── sub-dir/ │ ├── repoContent │ └── .gitignore └── another-dir/ └── repoContent
如果在sub-dir/.gitignore里写repoContent,只会忽略sub-dir下的repoContent;但如果写**/repoContent,会同时忽略根目录、sub-dir、another-dir里的所有repoContent。
2. 与其他模式组合时的差异
当和其他路径模式组合使用时,两者的匹配范围也不同:
- 比如
repoContent/*.log:只会匹配当前规则所在目录下的repoContent目录里的.log文件(如果repoContent是目录)。 - 而
**/repoContent/*.log:会匹配仓库所有层级里的repoContent目录下的.log文件。
总结
简单来说,repoContent是相对当前.gitignore文件所在位置的匹配,而**/repoContent是全局递归匹配。只有在根目录的.gitignore里单独使用时,两者效果才完全一致;换了位置或组合其他模式,差异就会显现。
内容的提问来源于stack exchange,提问作者Akshay Katiha
相关产品推荐
相关产品推荐

