Menu

.gitignore 生成器

为任意技术栈生成整洁的 .gitignore:涵盖语言、框架、IDE 和操作系统。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

.gitignore 生成器是什么?

每个 Git 仓库都需要一个 .gitignore 文件。它是一份纯文本列表,写明 Git 不应该跟踪的路径:构建产物、依赖文件夹、IDE 配置,以及 .DS_Store 这类操作系统垃圾文件。没有它,你的第一次提交就会不小心把 node_modules/、.env 和 target/ 一起带进去,而收拾这个烂摊子远比一开始就把文件写对麻烦得多。

每个技术生态要忽略的东西都不一样,而大多数项目同时横跨好几个生态。一个运行在 macOS 笔记本上、用 VS Code 开发的典型 Node + TypeScript 应用,就已经需要合并四份不同的忽略列表。凭记忆手写,很容易漏掉 coverage/、泄露 .env,或者把队友 JetBrains 环境里多出来的 .idea/ 提交上去。

所以这个生成器整合了权威项目 github/gitignore 中精选的模板,也就是 GitHub 官方自动推荐背后的那套规则,并让你把它们叠加组合。勾选适用的选项,就能得到一份去重后的 .gitignore,直接粘贴进你的仓库。无需账号,不会上传,完全在浏览器中运行。

编写 .gitignore 时你能学到什么

  • .gitignore 的模式使用 glob 语法:*.log 忽略所有日志文件,build/ 忽略一个文件夹,!important.log 即使被 glob 匹配到,也会取消忽略这个特定文件。
  • 模式相对于 .gitignore 文件所在的位置生效,所以 src/ 里的 .gitignore 只影响 src/ 下的文件。
  • 已经被跟踪的文件**不会**被追溯忽略。如果你提交了 node_modules/ 之后才把它加进 .gitignore,仍然需要运行 git rm -r --cached node_modules 来取消跟踪。
  • 多个 .gitignore 文件可以共存:仓库根目录、子文件夹,再加上一个全局的 ~/.gitignore_global,用于 JetBrains 或操作系统这类个人工具。
  • 取反规则的顺序很重要:后面的 !pattern 只有在前面的规则确实忽略了该文件时才有效。对一个文件夹取反,无法取消忽略其中的文件。

如何一步步生成 .gitignore

  1. 选择一个快捷技术栈预设(可选)

    如果你的项目符合常见组合,比如 Next.js、Django、Rails,点击预设就能一次勾选所有相关选项。然后再根据需要删减或补充几项。

  2. 添加你的语言

    每种语言都有需要忽略的产物:Node 有 node_modules/,Python 有 __pycache__/ 和虚拟环境,Java 有 target/ 和 .class 文件。选择项目实际要编译的语言。

  3. 添加你的框架

    在语言规则之上,框架还会增加自己的构建目录:Next.js 需要 .next/ 和 .vercel,Django 需要 staticfiles/ 和 db.sqlite3,Rails 需要 tmp/ 和 /storage/*。用了哪个框架就勾选哪个。

  4. 添加编辑器和操作系统

    添加**团队**(而不只是你自己)使用的编辑器模板:只要有人用 JetBrains 或 Vim,就把它们加上。然后添加团队用到的操作系统:macOS 会生成 .DS_Store,Windows 会生成 Thumbs.db,两者都很容易被误提交。

  5. 复制或下载

    右侧面板显示合并去重后的结果。点击**复制**,直接粘贴到仓库根目录的 .gitignore 中,或者点击**下载**直接保存文件。

.gitignore 语法速查

你最常写的模式。完整参考见 git-scm.com/docs/gitignore。

模式含义示例
node_modules忽略目录树中任意位置名称完全相同的文件或文件夹同时匹配 /node_modules 和 src/node_modules
node_modules/末尾斜杠:只匹配**文件夹**,不匹配同名文件不会匹配一个碰巧名为 node_modules 的文件
/build开头斜杠:只锚定在 .gitignore 所在目录匹配 /build,但不匹配 src/build
*.logGlob:匹配所有以 .log 结尾的文件匹配 error.log、debug.log、logs/foo.log
!important.log取反:取消忽略被前面规则匹配到的特定文件和 *.log 搭配,让某个日志文件继续被跟踪
docs/**/draft双星号:匹配 docs/ 任意子文件夹中的 draft匹配 docs/v1/draft 和 docs/2025/q1/draft
# comment注释:以 # 开头的行会被 Git 忽略用 # Node.js 这样的分节标题给规则分组

可以试试的 .gitignore 示例

最精简的 Node.js + macOS .gitignore

Mac 上每个 Node 项目都需要的规则

# Node.js node_modules/ npm-debug.log* dist/ .env .env.local # macOS .DS_Store ._*

任何要和 macOS 上的队友共享的 Node 项目,这都是最低要求。哪怕是很小的业余项目也该有这些规则:没有 .DS_Store 和 node_modules/ 规则,你就得没完没了地处理毫无意义的冲突。

Python + Django + JetBrains

常见的 Python 服务端技术栈

# Python __pycache__/ *.py[cod] .venv .pytest_cache/ # Django *.log local_settings.py db.sqlite3 media/ staticfiles/ # JetBrains .idea/ *.iml

一个在 PyCharm 中开发的典型 Django 后端。注意本地的 db.sqlite3 被忽略了:生产环境从不使用它,提交它会泄露开发数据,还会搞坏队友全新克隆的仓库。

用取反规则覆盖规则

忽略除一个之外的所有日志

*.log !keep-me.log

第一行忽略所有 .log 文件,接着 !keep-me.log 规则又把这个特定文件重新包含进来。取反只对前面规则确实忽略了的文件有效:你无法取消忽略位于已忽略文件夹中的文件。

编写 .gitignore 的常见错误

  • 事后才添加 .gitignore,还指望已提交的文件消失。它们不会消失,你必须运行 git rm -r --cached <path> 来取消跟踪。
  • 哪怕只提交过一次 .env。一次提交就会让密钥永远留在仓库历史中。在第一次提交**之前**就把 .env* 加进 .gitignore,并更换任何已经泄露的密钥。
  • 在共享仓库中忘记操作系统产生的杂项文件。只要有一个队友用 macOS,而仓库没有 .DS_Store 规则,这些文件就会出现在每个 PR 的 diff 中,拖慢代码审查。
  • 试图取消忽略已忽略文件夹中的文件。一旦你忽略了 build/,任何取反规则都无法重新包含 build/keep.txt,因为 Git 根本不会查看这个文件夹的内部。请调整目录结构,或者把文件移出来。
  • 把只有你自己用的工具的编辑器配置混进项目的 .gitignore。团队都用 VS Code,只有你用 JetBrains?那就把 .idea/ 放进你的**全局** ~/.gitignore_global。

.gitignore 生成器常见问题

这些 .gitignore 模板来自哪里?
这些模板精简自开源项目 github/gitignore,也就是你在 GitHub 新建仓库时勾选“添加 .gitignore”所用的同一来源。我们把每份模板删减为团队真正需要的规则,并按类别分组。
.gitignore 文件本身需要提交吗?
需要。.gitignore 本来就应该纳入版本控制并与团队共享,它是关于哪些文件该跟踪、哪些不该跟踪的约定。例外是个人偏好(比如你习惯用的编辑器),这些应该放在全局的 ~/.gitignore_global 中。
怎么取消跟踪一个已经提交的文件?
先把它加进 .gitignore,然后运行 git rm --cached <path>(或 git rm -r --cached <folder>),把它从索引中移除,而不会从磁盘上删除。把这两处改动一起提交,让队友也能看到更新。
一个仓库里可以有多个 .gitignore 文件吗?
可以。Git 会在每个目录中查找 .gitignore,并把规则应用到该子目录树。这对前后端忽略规则差别很大的 monorepo 很有用:根目录保留通用的操作系统和编辑器规则,把语言规则放在各个包的目录中。
.gitignore 和 .git/info/exclude 有什么区别?
.gitignore 会被提交并与团队共享。.git/info/exclude 只存在于你的本地克隆中,用于你不想推送的个人排除规则。如果要对你所有的仓库生效,请改用全局的 ~/.gitignore_global。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始