.gitignore 生成器使用指南:按栈组合、去重、再补自定义规则
为什么需要 .gitignore
Git 仓库里不该出现构建产物、依赖目录、本地密钥和编辑器垃圾文件。漏写忽略规则的后果很具体:
- 仓库膨胀:
node_modules/、target/、dist/动辄数百兆,克隆与 CI checkout 变慢 - 无意义冲突:每人 IDE / OS 产生的配置互相覆盖
- 密钥进历史:
.env、私钥一旦提交,删除工作区文件也消不掉历史 git status噪音:真正要提交的改动被淹没
.gitignore 生成器 按语言、框架、IDE、工具与操作系统勾选模板,合并时会去掉重复规则,并支持追加自定义行。全部在浏览器本地生成,不会把你的仓库路径上传到服务器。
核心语法(够用的子集)
| 语法 | 含义 | 示例 |
|---|---|---|
# 注释 | 说明 | # 依赖 |
*.log | 任意目录下匹配 | 所有日志 |
dirname/ | 目录 | node_modules/ |
/dist | 仅仓库根 | 根目录 dist |
!pattern | 取反 | !.env.example |
** | 跨层级 | **/coverage/ |
三条容易踩的坑
- 已被跟踪的文件不受新规则影响。先
git rm --cached <path>(或谨慎使用对整库的--cached重置),再提交。 - 取反顺序很重要。先宽后窄:先忽略
.env*,再!.env.example。 - 空目录不会被跟踪。需要占位时放
.gitkeep,并确保它没被忽略。
还有一条常被忽略:.gitignore 本身要提交。新人只在本机放一份、从不进库,团队就会各写各的,冲突照旧。
在生成器里怎么选
界面按五类展示(可用搜索过滤):
| 类别 | 典型选项 |
|---|---|
| 编程语言 | JavaScript/TypeScript、Python、Go、Rust、Java、Kotlin、C#/.NET、Dart/Flutter、PHP、Ruby |
| 框架 | React、Vue、Angular、Next.js、Node.js、Django、Spring Boot |
| IDE | VS Code、JetBrains、Eclipse、Xcode |
| 工具 | Docker、Terraform、单独的 node_modules / Env 模板 |
| 操作系统 | macOS、Windows、Linux |
推荐组合示例:
- 前端:
JavaScript/TypeScript+Next.js(或 React)+VS Code+macOS - 后端 Go:
Go+JetBrains+Docker+ 你的 OS - IaC:语言模板 +
Terraform(忽略.terraform/与*.tfstate)
多选时相同规则(如多处 node_modules/)只会保留第一次出现,输出更干净。
VS Code 模板:忽略私货,保留共享配置
VS Code 模板现在按常见社区写法处理:忽略 .vscode/*,但用取反保留 settings.json / tasks.json / launch.json / extensions.json 与代码片段。这样个人调试用的本地文件仍被挡在仓库外,团队共享的工作区配置可以正常提交。若你的团队约定「.vscode 一律不进库」,删掉那些 ! 行即可。
自定义规则区
模板覆盖不到的路径写在「自定义规则」:例如内部工具缓存目录、公司私有构建产物名。自定义行若与模板重复也会被去重。需要保留示例环境文件时,模板里的 Env 组已包含 !.env.example 一类取反,可按项目再改。
场景:新建 / 团队统一 / 老仓清理
新建项目
初始化仓库后立刻生成并提交 .gitignore,比事后清历史便宜几个数量级。复制下载的文件到根目录即可。
团队统一
把 IDE 与 OS 模板一并勾上,减少「有人提交 .idea、有人提交 .DS_Store」。个人偏好放到全局 excludes:
git config --global core.excludesfile ~/.gitignore_global
全局 excludes 适合「只影响你自己」的条目(本机密钥路径、个人笔记目录);仓库级 .gitignore 负责团队共识。
老仓已经误提交了依赖
- 用生成器产出完整规则并提交
git rm -r --cached .后重新git add .(先备份、先沟通)- 提交「停止跟踪被忽略文件」的变更
- 若曾提交密钥:先轮换密钥,再用
git filter-repo等工具清历史
清缓存前用 git ls-files | rg 'node_modules|\.env$' 估一下影响面,避免一次 --cached 把不该松开的大文件策略搞乱。
和 Docker 工作流的配合
容器化项目通常同时需要:
.gitignore:别把密钥和本地产物推进 Git.dockerignore:别把同样的东西推进镜像构建上下文
可用 .gitignore 生成器 管 Git,用 Dockerfile 生成器 右侧的 .dockerignore 标签管构建上下文;两者条目会重叠(.env、node_modules),但服务的系统不同,请分别维护。镜像构建好后,若要把历史 docker run 迁到编排文件,再用 docker run 转 compose。
锁文件该不该忽略?
| 生态 | 应用仓库常见做法 |
|---|---|
| npm / pnpm / yarn | 提交 lockfile |
| Go | 提交 go.sum;应用一般也提交 go.mod |
| Rust 应用 | 提交 Cargo.lock(生成器不再忽略它) |
| Composer 应用 | 提交 composer.lock |
| 库 / 可复用 crate | 视社区约定,可能忽略 lock |
生成器对 Rust/PHP 模板默认不忽略应用侧 lockfile,避免把「可复现构建」误删掉。库作者若明确不提交 lock,在自定义区补一行即可,不要改语言模板去服务少数场景。
规则生效的快速自检
生成或手改之后,用这三条确认意图:
git check-ignore -v path/to/file
git status --ignored
git ls-files --others --exclude-standard
check-ignore -v 会告诉你「哪一行规则命中了」——排查取反顺序时比肉眼扫文件快得多。
Monorepo 与生成目录
单体仓通常仍以根目录一份 .gitignore 为主:先语言模板,再按子应用勾框架(nextjs、django 等),最后 OS + IDE。子目录忽略适合「根忽略、子包偏偏要跟踪」(或反过来)的例外;在嵌套文件里用一行注释写清原因,免得后人「整理」时又全部拍平回根。工具链特有的缓存目录(.turbo/、.parcel-cache/、coverage/)放自定义规则一次即可——不要反复勾重叠的语言模板指望多出一行,生成器会把相同规则合并掉。
FAQ
为什么加了规则 git status 里还有那个文件?
它已经被跟踪。对单个路径:git rm --cached path;确认 .gitignore 生效后再提交。
可以在子目录再放一个 .gitignore 吗?
可以,规则相对该文件所在目录生效。团队规范更建议集中在根文件,子目录规则用于特殊子项目。
误提交密钥怎么办?
视为已泄露:立刻轮换;再清理 Git 历史。只靠后来加入 .gitignore 不够。
生成器去重会不会删掉我需要的注释?
注释行不去重合并逻辑里的「规则指纹」;被合并掉的是完全相同的非注释规则行。区块标题(# === Next.js ===)仍会按模板保留,方便以后对照来源。
排查注记
三条坑按伤害排:已跟踪文件不受新规则影响是头号误解(要 git rm --cached 先取消跟踪);取反必须先宽后窄;密钥一旦提交,删除工作区文件消不掉历史——所以误提交密钥的处理顺序是先轮换、再清历史,只补 .gitignore 不算处理。自检三条命令里 check-ignore -v 最值钱:它直接告诉你哪一行规则命中,排查取反顺序比肉眼扫文件快得多。lockfile 一节,生成器对 Rust/PHP 默认不忽略应用侧锁文件,理由明说是避免把「可复现构建」误删掉。
本文出自 ToolVault 工具匣。相关工具:.gitignore 生成器、Dockerfile 生成器、docker run 转 compose。访问 首页 查看更多开发者工具。
相关工具
相关文章
正则匹配不到内容 / 贪婪匹配吞掉结果,怎么办?
在线正则测试匹配不到、点号加星号贪婪吞掉多余内容、分组取不到值怎么办?讲清贪婪与懒惰、特殊字符转义和锚点这些常见坑,并教你用本站正则测试工具逐步调试。
接口测试怎么带 Token、过 CORS 报错怎么办?
用在线 API 测试工具发请求时,如何添加 Authorization Token、遇到 CORS 跨域报错、405 方法不允许、超时怎么办?一份逐步排查指南,附本站 API 测试工具用法。
Mock 数据生成器完全指南:快速生成测试数据
用字段类型、地区样本与随机种子批量生成可复现的测试数据,导出 JSON/CSV/TSV/YAML/SQL,提升前端联调与测试效率