⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议
Skip to content

8.1.5 哪些文件不该被穿越——.gitignore 的作用

不是所有文件都应该被 Git 追踪——密钥、依赖包、构建产物都应该被排除在版本控制之外。

为什么需要 .gitignore

将不该提交的文件纳入版本控制会带来严重问题:

问题类型后果
提交敏感信息API 密钥、密码泄露,可能导致安全事故
提交依赖包仓库体积暴增,clone 速度极慢
提交构建产物每次构建都产生大量无意义变更
提交系统文件.DS_StoreThumbs.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 > .gitignore

AI 协作指南

示例 Prompt

"请帮我生成一个 Next.js + Prisma + TypeScript 项目的 .gitignore 文件,包含 macOS 和 Windows 系统文件、VS Code 配置、环境变量、依赖和构建产物。"

验收清单

  • [ ] 理解 .gitignore 的作用和重要性
  • [ ] 能编写基本的忽略规则
  • [ ] 知道如何移除已追踪的文件
  • [ ] 了解全局 .gitignore 的配置方法