Git忽略规则配置异常:仅public目录被追踪,brand及.gitkeep未生效
.gitignore配置问题分析与修复
你的.gitignore核心问题是忽略了父目录导致子文件/目录无法被识别:
- 开头的
*会忽略/app下所有文件和目录,包括public目录本身。Git的规则是:如果某个目录被标记为忽略,Git会直接跳过这个目录,不会再扫描里面的任何内容——哪怕你给子文件加了!例外规则也没用。 - 你只单独放行了
.gitkeep文件,但没先放行它们所在的public和public/brand目录,导致Git根本看不到这些文件。
正确的.gitignore配置
* !.gitignore !public/ !public/.gitkeep !public/brand/ !public/brand/.gitkeep
配置逻辑说明
*:先统一忽略/app下所有内容,作为基础规则;!.gitignore:保留.gitignore自身,避免它被忽略;!public/:必须先放行public目录,让Git能扫描该目录内的内容;!public/.gitkeep:明确追踪public下的.gitkeep;!public/brand/:同样需要先放行brand目录,Git才能识别里面的文件;!public/brand/.gitkeep:追踪brand下的.gitkeep。
如果你的需求只是确保public和brand目录被Git追踪(空目录默认不被Git追踪,.gitkeep是用来占位的),也可以简化成下面的配置,效果一致:
* !.gitignore !public/ !public/brand/
因为放行目录后,Git会自动扫描目录内的文件(包括.gitkeep),只要没有其他忽略规则限制它们。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

