跳到内容

📦 .gitignore / .dockerignore 生成器

组合语言 (Node / Python / Go / Rust / Java / PHP / Ruby)、框架 (React / Next.js / Django / Rails / Laravel)、IDE (VSCode / JetBrains / Vim)、操作系统 (macOS / Windows / Linux) 预设,一键生成 .gitignore 或 .dockerignore。自动去重、保留注释、实时预览、复制和下载。

完全免费 无需注册 浏览器内完成 5 种语言 深色模式

📝 .gitignore (预览)

# 请至少选择一个预设

📖 常见的坑

把语言、框架、IDE、操作系统的预设叠加起来,生成 .gitignore.dockerignore,去掉重复行、保留注释。处理全部在浏览器内完成。.gitignore 只对「今后才被添加的文件」起作用——Git 已经在跟踪的文件,你写什么都不会被忽略而最常见的误解正在于此先提交了 .env,之后再把它加进 .gitignore,它既不会从仓库消失,也不会从历史消失「忽略它」与「当它没发生过」是两回事。

情形 会发生什么 怎么处理
对已被跟踪的文件不起作用 Git 一旦某个文件成为跟踪对象,就不再参考 .gitignore。因此,曾经提交过的 .envnode_modules、构建产物,无论你事后加多少规则,都会继续出现在差分里而真正的问题不在眼前的工作目录,而在历史——git rm --cached 取消跟踪,并不会抹掉过往提交里的内容任何人敲一下 git log -p 就能读到,而且如果你已经 push,同样的内容还留在 fork、镜像、CI 缓存以及每一份克隆里若是公开仓库,机械化收集密钥的扫描器几分钟内就能找到——从密钥公开到被滥用的实测时间,是以分钟计的 先取消跟踪:执行 git rm --cached .env,并与 .gitignore 的改动一起提交(不加 --cached 会把文件本身删掉)。目录则再加 -r而如果其中含有机密,补救办法只有一个:轮换那把密钥。改写历史(git filter-repo)是可行的,但不要把它当作唯一措施——所有人都得重新克隆,而且它够不着别人的 fork 和你已经推送出去的对象预防远比补救便宜养成在 git add 之前先读 git status 的习惯,并gitleaksgit-secrets 装进 pre-commit 钩子
.gitignore 原样当成 .dockerignore 这两者格式相同,目的不同.gitignore 写的是要排除在版本控制之外的东西.dockerignore 写的是不要送进构建上下文的东西。直接互相套用会在两个方向上出问题。把构建需要的东西排除掉——dist/.gitignore 中是正确的排除项,但对于要 COPY 预构建产物的 Dockerfile 而言,它是必需的目录。反过来,该排除的却留了下来——不排除 .git/node_modules/,上下文会涨到几百 MB,构建明显变慢。而且,宿主机上安装的 node_modules 一旦进入镜像,就会混入为其他平台编译的原生模块,运行时崩溃 请把两者分开来写。.dockerignore「只放行镜像构建所需之物」的思路来写就不会跑偏——至少要排除 .gitnode_modules.env*.log、测试、文档、CI 配置.env 务必加进去——它一旦进入上下文,就会被 COPY . . 烤进镜像,凡是拿到这个镜像的人都能读到。效果验证很简单:docker build 开头打印的上下文传输量——控制在几 MB 以内就算合适另外,.dockerignore 只有放在构建上下文的根目录才会被读取——放进子目录是无效的
规则并没有匹配到你以为的地方 写法上的细节会改变含义。不含斜杠的 build 会匹配任意层级上的 build前面加斜杠的 /build 只匹配根目录下的末尾加斜杠的 build/ 只匹配目录。最难察觉的是! 取消排除如果父目录已被排除,你就无法用 ! 把其中的文件找回来——Git 根本不会进入被排除的目录,你写在那里的规则连读都不会被读到。把 node_modules/!node_modules/mylib 并排写上,后者什么也不会发生既不报错也不警告,因此它只会以「明明写了却不生效」的形式浮现。 拿不准就执行 git check-ignore -v <路径>它会用一行告诉你,是哪个文件第几行的规则生效了——知不知道这条命令,排查耗时会差一个数量级。没有任何输出,就说明该路径没有被忽略。若想把目录里的某一项找回来,请排除目录的内容而不是目录本身:先写 node_modules/*,再写 !node_modules/mylib,就能如你所愿。叠加预设会让行数变多,但数量本身不是问题——问题在于出现「不知道这一行为什么存在」的状态,所以请把项目专属的行加上注释、集中放在文件末尾

忽略配置并不只在一个地方。Git 会依次查看仓库的 .gitignore、子目录的 .gitignore.git/info/exclude,以及全局配置(core.excludesFile如何分配有明确的判断标准对项目里任何人都无用的东西(构建产物、依赖目录)放进仓库的 .gitignore,而只属于你自己环境的事情(编辑器配置、操作系统生成的文件、个人备忘)放进全局配置.DS_StoreThumbs.db.idea/ 写进仓库的 .gitignore,严格来说是在把自己的环境强加给别人——不过现实中人人都这么做,团队统一口径反而摩擦更小,这也是事实。最后,Git 不跟踪空目录——若想保留 logs/ 这样的空目录,请在其中放一个名为 logs/.gitkeep 的空文件.gitkeep 不是 Git 的功能,只是一个约定俗成的文件名)。

📖 使用方法

  1. 1
    选择模式
    在上方选择 .gitignore 或 .dockerignore。.dockerignore 优先包含防镜像膨胀模式。
  2. 2
    选择技术栈
    点选你使用的语言/框架/IDE/操作系统芯片,自动合并去重。
  3. 3
    复制或下载
    通过预览上方按钮复制或下载为 .gitignore / .dockerignore 文件。

❓ 常见问题

.gitignore 和 .dockerignore 区别?
.gitignore 用于 Git 追踪排除,.dockerignore 用于 Docker build context 排除。.dockerignore 应特别包含 node_modules / .git / *.log 以减小镜像。
可以追加到现有文件?
可以。粘贴到现有文件末尾,或用 sort -u 去重。
与 github/gitignore 区别?
github/gitignore 是单栈全量模板;本工具精选核心行并合并多栈。
可以增加预设吗?
请通过反馈表单告知技术栈名,需求多会添加。
🐛 此工具出现问题了吗?

免费、无需注册。仅提供复现步骤也有帮助。报告将直接发送给运营者并用于改进。

※ 为复现问题,浏览器信息 (UA / 屏幕 / 语言 / URL) 将自动发送