如何配置.gitignore仅递归保留.asd文件 目录名含点时也生效
问题原因
你之前编写的*.*规则会匹配所有名称带点的对象,不区分文件和目录。而.gitignore的核心逻辑是:如果父级目录被标记为忽略,Git不会再扫描该目录下的任何内容,即使子文件配置了白名单规则也不会生效。所以你那些名称带点的目录(比如fooooo.srcs、barr.srcs)直接被*.*匹配忽略了,目录内的.asd文件自然不会被识别到。
正确的.gitignore配置
仅靠.gitignore完全可以实现需求,使用以下规则即可:
# 第一步:默认忽略所有文件 * # 第二步:放行所有目录,确保Git会遍历所有层级目录寻找需要保留的文件 !*/ # 第三步:放行所有.asd后缀的文件,不受目录层级限制 !*.asd # 可选:如果需要将.gitignore本身也纳入版本管理,加下面这条 !.gitignore
效果验证
使用上述规则后再执行git status -u -s,输出将仅包含所有.asd文件和(你选择保留的).gitignore文件,其余无关文件都会被正常忽略,VS Code等编辑器的Git插件也不会再将无关文件标记为未跟踪。
如果有明确不需要扫描的超大目录,你可以在规则最上方额外添加对应目录的忽略规则(比如node_modules/),不会影响.asd文件的匹配逻辑。
内容的提问来源于stack exchange,提问作者jka
相关产品推荐
相关产品推荐

