最精简的 Node.js + macOS .gitignore
# Node.js node_modules/ npm-debug.log* dist/ .env .env.local # macOS .DS_Store ._*
任何要和 macOS 上的队友共享的 Node 项目,这都是最低要求。哪怕是很小的业余项目也该有这些规则:没有 .DS_Store 和 node_modules/ 规则,你就得没完没了地处理毫无意义的冲突。
为任意技术栈生成整洁的 .gitignore:涵盖语言、框架、IDE 和操作系统。
最后更新
Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。
每个 Git 仓库都需要一个 .gitignore 文件。它是一份纯文本列表,写明 Git 不应该跟踪的路径:构建产物、依赖文件夹、IDE 配置,以及 .DS_Store 这类操作系统垃圾文件。没有它,你的第一次提交就会不小心把 node_modules/、.env 和 target/ 一起带进去,而收拾这个烂摊子远比一开始就把文件写对麻烦得多。
每个技术生态要忽略的东西都不一样,而大多数项目同时横跨好几个生态。一个运行在 macOS 笔记本上、用 VS Code 开发的典型 Node + TypeScript 应用,就已经需要合并四份不同的忽略列表。凭记忆手写,很容易漏掉 coverage/、泄露 .env,或者把队友 JetBrains 环境里多出来的 .idea/ 提交上去。
所以这个生成器整合了权威项目 github/gitignore 中精选的模板,也就是 GitHub 官方自动推荐背后的那套规则,并让你把它们叠加组合。勾选适用的选项,就能得到一份去重后的 .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 只有在前面的规则确实忽略了该文件时才有效。对一个文件夹取反,无法取消忽略其中的文件。如果你的项目符合常见组合,比如 Next.js、Django、Rails,点击预设就能一次勾选所有相关选项。然后再根据需要删减或补充几项。
每种语言都有需要忽略的产物:Node 有 node_modules/,Python 有 __pycache__/ 和虚拟环境,Java 有 target/ 和 .class 文件。选择项目实际要编译的语言。
在语言规则之上,框架还会增加自己的构建目录:Next.js 需要 .next/ 和 .vercel,Django 需要 staticfiles/ 和 db.sqlite3,Rails 需要 tmp/ 和 /storage/*。用了哪个框架就勾选哪个。
添加**团队**(而不只是你自己)使用的编辑器模板:只要有人用 JetBrains 或 Vim,就把它们加上。然后添加团队用到的操作系统:macOS 会生成 .DS_Store,Windows 会生成 Thumbs.db,两者都很容易被误提交。
右侧面板显示合并去重后的结果。点击**复制**,直接粘贴到仓库根目录的 .gitignore 中,或者点击**下载**直接保存文件。
你最常写的模式。完整参考见 git-scm.com/docs/gitignore。
| 模式 | 含义 | 示例 |
|---|---|---|
node_modules | 忽略目录树中任意位置名称完全相同的文件或文件夹 | 同时匹配 /node_modules 和 src/node_modules |
node_modules/ | 末尾斜杠:只匹配**文件夹**,不匹配同名文件 | 不会匹配一个碰巧名为 node_modules 的文件 |
/build | 开头斜杠:只锚定在 .gitignore 所在目录 | 匹配 /build,但不匹配 src/build |
*.log | Glob:匹配所有以 .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 这样的分节标题给规则分组 |
# Node.js node_modules/ npm-debug.log* dist/ .env .env.local # macOS .DS_Store ._*
任何要和 macOS 上的队友共享的 Node 项目,这都是最低要求。哪怕是很小的业余项目也该有这些规则:没有 .DS_Store 和 node_modules/ 规则,你就得没完没了地处理毫无意义的冲突。
# 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,还指望已提交的文件消失。它们不会消失,你必须运行 git rm -r --cached <path> 来取消跟踪。.env。一次提交就会让密钥永远留在仓库历史中。在第一次提交**之前**就把 .env* 加进 .gitignore,并更换任何已经泄露的密钥。.DS_Store 规则,这些文件就会出现在每个 PR 的 diff 中,拖慢代码审查。build/,任何取反规则都无法重新包含 build/keep.txt,因为 Git 根本不会查看这个文件夹的内部。请调整目录结构,或者把文件移出来。.gitignore。团队都用 VS Code,只有你用 JetBrains?那就把 .idea/ 放进你的**全局** ~/.gitignore_global。.gitignore 本来就应该纳入版本控制并与团队共享,它是关于哪些文件该跟踪、哪些不该跟踪的约定。例外是个人偏好(比如你习惯用的编辑器),这些应该放在全局的 ~/.gitignore_global 中。.gitignore,然后运行 git rm --cached <path>(或 git rm -r --cached <folder>),把它从索引中移除,而不会从磁盘上删除。把这两处改动一起提交,让队友也能看到更新。.gitignore,并把规则应用到该子目录树。这对前后端忽略规则差别很大的 monorepo 很有用:根目录保留通用的操作系统和编辑器规则,把语言规则放在各个包的目录中。.gitignore 会被提交并与团队共享。.git/info/exclude 只存在于你的本地克隆中,用于你不想推送的个人排除规则。如果要对你所有的仓库生效,请改用全局的 ~/.gitignore_global。