.gitignore 如何忽略所有文件、只保留少数几个

白名单式 gitignore:先 忽略全部,再用 ! 逐个取反要保留的文件。注意目录要先用 !dir/ 放行才能保留其中文件;每行规则顺序敏感,后写的覆盖先写的。

最佳实践
Git 分支协作与合并示意

白名单写法:第一行 * 忽略一切,然后用 ! 逐个放行。陷阱:要保留子目录里的文件,必须先放行其父目录链,否则 Git 根本不会进入被整体排除的目录。

基本结构

# 忽略一切
*

# 但保留这些
!.gitignore
!README.md
!Makefile
!src/
!src/**

嵌套目录的正确姿势

*
!docs/            # 先放行目录
docs/*            # 再忽略其内容
!docs/guide.pdf   # 最后放行目标文件

!docs/** 一条也可以(放行目录下所有内容),按需求选。

调试技巧

git check-ignore -v some/file.txt    # 看文件命中了哪条规则(无输出=被保留)
git status --ignored                 # 总览哪些被忽略了

白名单模式规则微妙,写完务必用 check-ignore 抽查几个关键路径。

常见问题(FAQ)

Q:为什么 !file.txt 不生效?

父目录被整体排除了(如上面有 docs/ 而没有 !docs/)。目录一旦被整目录排除,内部取反无效——必须逐层放行。

Q:什么时候用这种白名单模式?

发布目录(只要特定产物进库)、配置模板仓库、教学用最小化仓库。日常项目还是用黑名单(忽略不需要的)更省心。

Q:和 .gitkeep 保留空目录冲突吗?

不冲突,可组合:* + !logs/ + logs/* + !logs/.gitkeep 实现"保留目录结构但忽略产物"。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台