首页 / Git 入门教程 / 忽略文件(.gitignore)

Git 入门教程

忽略文件(.gitignore)

本教程共 26 篇 · 第 8 篇 · 更新于 2026-07-29 · 约 6 分钟阅读

GitGit 入门教程.gitignore忽略文件globcore.excludesfilegit check-ignore

8. 忽略文件(.gitignore)

本节目标:学会配置 .gitignore,让 Git 自动跳过那些不该提交的文件。

为什么需要忽略

项目里有些文件不该进版本库:

  • 操作系统生成的垃圾(Windows 的 Thumbs.db、macOS 的 .DS_Store
  • 编译产物(.class.odist/
  • 依赖目录(node_modules/vendor/
  • 敏感配置(数据库密码、API 密钥)
  • 编辑器临时文件(.swp~ 结尾的备份)

每次 git status 都看到这些文件,烦不说,还容易误提交。

.gitignore 的基本用法

在仓库根目录创建一个 .gitignore 文件,写入要忽略的文件模式:

# 忽略所有 .log 文件
*.log

# 忽略 node_modules 目录
node_modules/

# 忽略特定文件
config.ini

.gitignore 本身应该提交进仓库,这样团队成员都能用同一套规则。

Note

# 开头的行是注释。空行会被忽略。

语法规则

.gitignore 使用 glob 模式匹配:

模式含义
*匹配零个或多个字符
?匹配单个字符
[abc]匹配方括号内任一字符
**匹配任意中间目录
/ 开头只匹配仓库根目录
/ 结尾匹配目录
! 开头取反,不忽略

示例

# 忽略所有 .a 文件
*.a

# 但 lib.a 例外
!lib.a

# 只忽略根目录下的 TODO
/TODO

# 忽略任何名为 build 的目录
build/

# 忽略 doc 下所有 .txt,但不忽略子目录
doc/*.txt

# 忽略 doc 及其子目录下所有 .pdf
doc/**/*.pdf

已跟踪文件怎么办

.gitignore 只对未跟踪文件生效。如果文件已经被 Git 提交了,加到 .gitignore 也没用。

解决办法:先从 Git 删除跟踪,但保留本地文件:

git rm --cached config.ini

然后提交这次删除。之后 config.ini 就被忽略了,本地文件还在。

如果要从所有地方(包括已跟踪的)批量忽略:

git rm -r --cached .
git add .
git commit -m "apply .gitignore"
Warning

git rm --cached 只是取消跟踪,不会删本地文件。但 git rm 不加 --cached 会真的删文件。注意区分。

全局忽略

有些文件你想在所有仓库都忽略,比如操作系统生成的垃圾。

创建一个全局忽略文件:

# macOS
echo ".DS_Store" >> ~/.gitignore_global

# Windows
echo "Thumbs.db" >> ~/.gitignore_global

然后告诉 Git 用这个文件:

git config --global core.excludesfile ~/.gitignore_global

这样所有仓库都会自动应用这些规则,不用每个项目单独配。

调试 .gitignore

发现某个文件被意外忽略了,查一下是哪个规则搞的:

git check-ignore -v config.ini

输出:

.gitignore:5:*.ini	config.ini

告诉你:.gitignore 第 5 行的 *.ini 规则匹配了这个文件。

常见模板

GitHub 维护了一个 .gitignore 模板仓库:https://github.com/github/gitignore

常用模板:

# Python
__pycache__/
*.py[cod]
*.egg-info/
dist/
build/
.venv/

# Node.js
node_modules/
npm-debug.log
.env

# Java
*.class
*.jar
target/

# IDE
.idea/
.vscode/
*.swp
*~

# OS
.DS_Store
Thumbs.db
Desktop.ini
Tip

不需要从头写。去 gitignore.io 或 GitHub 模板库找对应语言和 IDE 的组合,复制粘贴就行。

这章学到了什么

  • .gitignore 放在仓库根目录,本身要提交
  • glob 语法:*?[]**! 取反
  • 已跟踪文件用 git rm --cached 取消跟踪
  • 全局忽略用 core.excludesfile
  • git check-ignore -v 调试忽略规则

下一章,我们进入 Git 最强大的功能:分支。