一、.gitignore 核心规则
.gitignore 通过路径匹配规则忽略文件 / 文件夹,核心原则:
- 路径基于 .gitignore 所在目录(项目根目录最常用);
- 以 / 结尾表示匹配文件夹;
- 以 # 开头是注释;
- 以 ! 开头表示反向忽略(排除已匹配的规则);
- 通配符 * 匹配任意字符,** 匹配任意层级目录。
二、常用忽略场景示例
假设项目结构如下:
bash
your-project/
├── .gitignore # 根目录的忽略文件
├── node_modules/ # 依赖文件夹
├── dist/ # 打包输出文件夹
├── src/
│ ├── logs/ # 日志文件夹
│ ├── config.json # 配置文件
│ └── temp/ # 临时文件夹
├── .env # 环境变量文件
└── test/
└── report.html # 测试报告
1. 忽略根目录下的文件夹
规则: 直接写文件夹名 + /(推荐加 / 避免匹配同名文件)
bash
# 忽略根目录的 node_modules 文件夹(所有子文件/子文件夹都忽略)
node_modules/
# 忽略根目录的 dist 文件夹
dist/
2. 忽略指定子目录下的文件夹 / 文件
规则: 写相对路径(从 .gitignore 所在目录开始)
bash
# 忽略 src 下的 logs 文件夹
src/logs/
# 忽略 src 下的 temp 文件夹
src/temp/
# 忽略 src 下的 config.json 文件
src/config.json
# 忽略 test 下的 report.html 文件
test/report.html
3. 忽略所有目录下的同名文件 / 文件夹
规则: 不加路径前缀,匹配全项目的同名目标
bash
# 忽略项目中所有叫 .env 的文件(任意目录)
.env
# 忽略项目中所有叫 temp 的文件夹(任意目录)
temp/
# 忽略所有 .log 后缀的文件(任意目录)
*.log
4. 忽略指定层级的目录(精准匹配)
规则: 用 / 限定层级,避免误匹配
bash
# 只忽略根目录的 temp 文件夹(不忽略 src/temp)
/temp/
# 只忽略 src 下的 config.json(不忽略其他目录的 config.json)
/src/config.json
5. 反向忽略(排除已匹配的规则)
规则: ! + 路径(需先匹配忽略,再反向排除)
bash
# 忽略所有 .log 文件
*.log
# 但保留 src/logs/important.log
!src/logs/important.log
# 忽略 src 下所有文件
src/*
# 但保留 src/index.js
!src/index.js
6. 通配符高级用法
bash
# 匹配任意层级的 node_modules(如 a/node_modules、a/b/node_modules)
**/node_modules/
# 匹配 src 下所有 .json 文件(包括子目录)
src/**/*.json
# 匹配以 test 开头的文件夹(test1/、test2/ 等)
test*/
三、注意事项
- .gitignore 生效范围:
- 优先读取项目根目录的 .gitignore;
- 也可在子目录创建 .gitignore(规则仅对当前子目录生效);
- 全局忽略:git config --global core.excludesfile ~/.gitignore_global(匹配所有本地仓库)。
- 已提交的文件 / 文件夹无法被忽略:
如果文件已被 git add/git commit,需先移除追踪再忽略:
bash
# 移除已追踪的文件夹(仅从 git 移除,保留本地文件)
git rm -r --cached node_modules/
# 提交忽略规则
git add .gitignore
git commit -m "add gitignore rules"
- 规则优先级:
- 子目录 .gitignore 覆盖根目录规则;
- ! 反向规则优先级高于普通忽略规则;
- 精准路径(如 /src/config.json)优先于模糊匹配(如 *.json)。
通过以上规则,可精准控制 Git 忽略的文件 / 文件夹,避免无关文件提交到仓库。