.gitignore 生成
按技术栈勾选合并模板,自动去重并解释少数容易被忽略的坑。
这个工具内置了 26 份精选模板(内容取自 github/gitignore 仓库并按场景裁剪),勾选后按「模板一节一段」合并成一份根目录 .gitignore:同一条模式全文件只保留第一次出现,段注释标明来源模板,最后始终追加一段兜底规则(.env 与 !.env.example、*.pem、id_rsa、node_modules、.DS_Store、Thumbs.db),保证密钥类文件哪怕忘了勾选模板也在忽略清单里。
「进阶:检查某条路径会不会被忽略」那条折叠(默认收起)里的检查框等价于 `git check-ignore -v` 的解释器。它不调用 git 本体,不读取 .git/info/exclude、core.excludesFile 全局忽略文件和子目录里分散的 .gitignore,不处理符号链接与 core.ignorecase(Windows/macOS 上真 git 默认忽略大小写),也不会告诉你哪些文件「已经被跟踪所以忽略无效」——那要在本机跑 `git ls-files`。
.gitignore 生成怎么用
- 勾选与合并:模板按前端/后端与语言/桌面/安全兜底分组,每个勾选框下面先写出该模板的前 3 条 pattern 加「+N 条」,勾之前就知道里面是什么;「按栈推荐」的七个按钮(Node.js/前端构建/Python/Java/Kotlin/Go/Rust/C系/.NET/PHP/Ruby)一键整组替换勾选,不会把 26 个模板一次全勾上,手动改勾或清空后按钮自动复位;要一套 Web 项目基线也可以点「勾选前端常用」再按需补勾。meta 行报告规则总数与被去掉的重复条数;提示条列出取反冲突与可疑写法,改完建议再勾一次核对。
- 顺序就是优先级:合并结果里后写的规则覆盖先写的,兜底块永远在最后,所以你在模板段里加的同名例外(如 !config.env)会被兜底的 .env.* 重新压住——要放行就把取反写在生成文件末尾之后手工调整。
- 路径检查:点开「进阶:检查某条路径会不会被忽略」,在检查框输入 dist/main.js、logs/keep.log 这类仓库相对路径,输出会指出是自身命中哪条规则、还是父目录被整目录排除(后者就是 `!` 救不回文件的第一坑)。输入一个仓库内路径,它按同样的顺序语义(后匹配的规则胜出)判定是否被忽略。匹配支持 `*`、`?`、字符组、`**/` 前缀、`/**` 后缀、尾部 `/` 目录限定、前导 `/` 锚定与 `!` 取反,默认大小写敏感。
- 26 份模板覆盖到哪:从 Node/Vue/React 到 Python(poetry/pipenv/uv)、Java(Maven/Gradle)、Go/Rust/C·C++/C#(Unity/Unreal)、PHP/Ruby/Django/.NET,再到 macOS/Windows/Linux/IDE 与日志密钥兜底。
- 合并时的两类静态检查:合并时会做两类静态检查,都直接来自 gitignore(5) 手册的规则:一是取反冲突——`!` 只能重新包含「父目录都没被忽略」的文件,git 出于性能不会进入已被排除的目录,所以 `logs/` 之后写 `!logs/keep.log` 完全无效,工具会把这类写法逐条指出来并给出「把 `logs/` 改成 `logs/*` 再取反目录」的修复建议;二是可疑写法——`**` 没有单独成段时按规范属于无效模式(行为退化成不跨目录分隔符的 `*`),官方 Gradle 模板历史上的 `!**gradle-wrapper.jar` 正是这个坑,这里会警告并建议改成 `!**/gradle-wrapper.jar`。
常见问题
为什么 .gitignore 对已经提交过的文件没用?
.gitignore 只约束「未跟踪」的文件:git 从不在已跟踪文件上检查忽略规则。要让某个已入库文件从此被忽略,得先 `git rm --cached <路径>` 让它回到未跟踪状态,再提交这份 .gitignore。本工具不调用 git,也不会替你检测哪些文件已被跟踪。
`!` 取反为什么救不回被忽略目录里的文件?
手册原话:若文件的父目录已被排除,就无法重新包含它——git 为性能不进入被忽略的目录,根本不看里面的文件,你的 `!` 写在哪条规则后面都无从生效。正确写法是别把目录整体排除:`logs/` 改成 `logs/*`,再 `!logs/keep.log`;这样目录本身没被排除,git 才会进去逐文件应用规则。合并检查会把这种写法直接指出来。
生成的文件和真 git 的判定会有出入吗?
会,来源是本工具只看一份根目录规则:子目录里还有 .gitignore 的项目、配了 core.excludesFile 全局忽略、Windows/macOS 上大小写不敏感(core.ignorecase=true)的场景,真 git 的结论可能不同。另外符号链接指向目录的归属、`git add -f` 强行加入等也不在模拟范围。以 `git check-ignore -v` 为本机最终裁定。
对应功能编号 #116无需安装,手机端同样可用按 Ctrl + K 换工具