8.1.5 哪些文件不该被穿越——.gitignore 的作用
不是所有文件都应该被 Git 追踪——密钥、依赖包、构建产物都应该被排除在版本控制之外。
为什么需要 .gitignore
将不该提交的文件纳入版本控制会带来严重问题:
| 问题类型 | 后果 |
|---|---|
| 提交敏感信息 | API 密钥、密码泄露,可能导致安全事故 |
| 提交依赖包 | 仓库体积暴增,clone 速度极慢 |
| 提交构建产物 | 每次构建都产生大量无意义变更 |
| 提交系统文件 | .DS_Store、Thumbs.db 污染仓库 |
.gitignore 基础语法
gitignore
# 这是注释
# 忽略单个文件
.env
# 忽略特定目录
node_modules/
.next/
# 忽略所有 .log 文件
*.log
# 忽略所有目录下的 .DS_Store
**/.DS_Store
# 但不忽略 important.log
!important.log
# 忽略根目录下的 build,但不忽略子目录的 build
/build
# 忽略 doc 目录下所有 .txt 文件
doc/**/*.txt语法规则速查
| 模式 | 说明 | 示例 |
|---|---|---|
* | 匹配任意字符(不含 /) | *.log |
** | 匹配任意目录层级 | **/node_modules |
? | 匹配单个字符 | ?.txt |
[] | 匹配字符集 | [abc].txt |
/ 开头 | 只匹配根目录 | /build |
/ 结尾 | 只匹配目录 | logs/ |
! | 取反(不忽略) | !important.log |
Next.js 项目推荐配置
gitignore
# 依赖
node_modules/
.pnpm-store/
# Next.js 构建产物
.next/
out/
# 环境变量(敏感信息)
.env
.env.local
.env.*.local
# 日志
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# IDE
.vscode/
.idea/
*.swp
*.swo
# 系统文件
.DS_Store
Thumbs.db
# TypeScript
*.tsbuildinfo
# 测试覆盖率
coverage/
# Vercel
.vercel
# Prisma
prisma/*.db
prisma/*.db-journal常见问题处理
已提交的文件如何从 Git 中移除
bash
# 从 Git 追踪中移除,但保留本地文件
git rm --cached .env
# 从 Git 追踪中移除整个目录
git rm -r --cached node_modules/
# 添加到 .gitignore
echo ".env" >> .gitignore
# 提交变更
git commit -m "chore: 移除敏感文件并更新 gitignore"检查文件为什么被忽略
bash
# 检查某个文件是否被忽略
git check-ignore -v path/to/file
# 检查哪些文件被追踪
git ls-files全局 .gitignore
对于所有项目都需要忽略的文件(如 IDE 配置),可以设置全局配置:
bash
# 创建全局 gitignore 文件
touch ~/.gitignore_global
# 配置 Git 使用它
git config --global core.excludesfile ~/.gitignore_global常见全局忽略内容:
gitignore
# macOS
.DS_Store
.AppleDouble
.LSOverride
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# IDE
.idea/
.vscode/
*.sublime-project
*.sublime-workspace.gitignore 模板资源
- gitignore.io:根据项目类型生成 .gitignore
- GitHub gitignore 仓库:官方维护的各语言/框架模板
bash
# 使用 gitignore.io 生成
curl -sL https://www.toptal.com/developers/gitignore/api/node,nextjs > .gitignoreAI 协作指南
示例 Prompt:
"请帮我生成一个 Next.js + Prisma + TypeScript 项目的 .gitignore 文件,包含 macOS 和 Windows 系统文件、VS Code 配置、环境变量、依赖和构建产物。"
验收清单
- [ ] 理解 .gitignore 的作用和重要性
- [ ] 能编写基本的忽略规则
- [ ] 知道如何移除已追踪的文件
- [ ] 了解全局 .gitignore 的配置方法
