Gitignore 生成器

从 200+ 个 github/gitignore 官方模板挑选语言、框架、IDE 与操作系统,自动去重合并并下载或复制 .gitignore 文件。在浏览器中处理。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
清空所有会移除已选模板、自定义规则和搜索,并清除本工具保存的输入。在工具内聚焦时,Ctrl/⌘+L 执行相同操作。
复制完整合并文件。选中模板或非空白自定义规则产生输出后才能复制,复制失败后可直接重试。
将当前完整文件下载为 UTF-8 文本 .gitignore。模板已打包在本地,此操作不请求或上传模板。
.gitignore
在上方选择一个或多个模板,合并后的 .gitignore 将显示在这里。
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

什么是 .gitignore 文件?

.gitignore 列出 Git 在 stage 时应忽略的路径模式——通常是构建产物、操作系统元数据、IDE 缓存、依赖目录与密钥文件。模式遵循 gitignore glob 语法(*.log、build/、!keep-this.log),按目录生效。每个 Git 仓库都应该提交一份,以保证 clone 可复现,避免泄漏环境噪声。

常见 Stack 组合

  • 全栈 JavaScript:Node + Nextjs + macOS + JetBrains
  • Python 数据项目:Python + macOS + VisualStudioCode
  • 移动端原生:Android + Java + Gradle + JetBrains + macOS
  • 静态站点:Node + Jekyll + macOS + VisualStudioCode
  • Go 服务:Go + macOS + VisualStudioCode + JetBrains

合并逻辑

选中的模板按字母排序拼接。每段会输出 ### Name.gitignore 头部,方便追溯规则来源。跨模板重复的规则行在首次出现后被丢弃,注释与空行原样保留。自定义规则在最后以 ### Custom additions 段呈现。生成结果开头带一行指向 ZeroTool 与 github/gitignore 源的 attribution——不喜欢可以直接删掉。

为什么用预打包模板

请求时去抓 github/gitignore 会带来网络延迟与速率限制风险。我们在构建期一次性快照仓库、去重 ID、打成单个 TypeScript 模块——可预测、可审计、零运行时依赖。刷新时手动跑同步脚本,从上游拉新快照后一次 commit 即可。

示例:Node + macOS + JetBrains + VS Code

勾选 JetBrains、macOS、Node、VisualStudioCode,再在自定义规则里加三行:node_modules/、.env.local、coverage-html/。输出共 313 行:开头是来源说明,接着按字母顺序排列 4 个模板(### JetBrains.gitignore 在最前),最后的 ### Custom additions 只剩 .env.local 和 coverage-html/。自定义的 node_modules/ 被去掉了,因为 Node 模板里已有完全相同的一行。

.env.local 保留了下来,尽管 Node 模板的 .env.* 已经能匹配它。去重比较的是每行去掉首尾空白后的文本,不比较规则匹配的范围。

语法陷阱(用 Git 实测)

对下面这个 .gitignore,git check-ignore -v(Git 2.56)的结果是:

logs/
!logs/keep.log
docs/*.pdf
build/
/secret.txt
  • logs/keep.log 仍被 logs/ 忽略。Git 不会进入已排除的目录,所以否定规则不生效(见 gitignore 文档)。需要例外时把 logs/ 改成 logs/*。
  • docs/*.pdf 忽略 docs/a.pdf,不忽略 docs/notes/old.pdf:中间带斜杠的规则相对 .gitignore 所在目录,* 不跨越 /。
  • build/ 在任意层级都匹配(build/ 和 src/build/),但只匹配目录。
  • /secret.txt 只匹配根目录下的文件,src/secret.txt 不被忽略。

已经被跟踪的文件

新规则不会让 Git 停止跟踪已跟踪的文件。把它们从索引里移除再提交,文件仍留在磁盘上:

git rm -r --cached node_modules/
git commit -m "Stop tracking node_modules"

这不会从历史提交中删除文件。如果提交过密钥,先更换密钥;改写历史(例如用 git filter-repo)需要强制推送,所有人重新克隆。

限制

  • 内置 237 个模板:162 个来自 github/gitignore 根目录(语言与框架),75 个来自 Global/(编辑器、操作系统、工具)。不含 community/ 目录。
  • 模板是上次更新内置包时的快照,上游之后合并的改动要等下次更新才会出现。
  • 去重只删除整个文件中重复出现的相同行,不会合并等价的写法,比如 node_modules 和 node_modules/。

FAQ

模板来源是什么?

全部模板来自 github/gitignore 官方仓库(CC0-1.0 协议)。我们打包了仓库根目录(编程语言与框架)以及 Global/ 子目录(IDE、操作系统、编辑器、构建工具)。community/ 子目录因质量参差未收录。

选多个模板时重复规则怎么处理?

按行 normalize 后跨模板去重。首次出现的规则保留,后续重复的静默丢弃。注释行与空行原样保留,便于追溯每段规则来自哪个模板。

可以追加自己的规则吗?

可以。展开模板下方的「追加自定义规则」区,写入项目特有的路径或 glob,会作为 ### Custom additions 段拼到最后,并参与同一轮去重。

和 gitignore.io 有什么区别?

上游数据相同(github/gitignore)。差异在:四语言本地化界面(English / 中文 / 日本語 / 한국어)、带来源注释的实时预览、在浏览器中执行(数据不离开本地)、模板预打包后离线可用。

模板多久更新一次?

通过手动跑同步脚本从上游拉新快照并 commit。上游一个月几次小改,按节奏定期刷新即可。gitignore 语法稳定,老模板很少破坏兼容。