无需登录 数据私有 本地保存

.gitignore 规则测试器 - 验证文件是否被忽略

40
0
0
0
.gitignore 规则
已解析 0 条有效规则
测试文件路径
快捷测试路径:
node_modules/express/package.json dist/main.js .env src/index.js .DS_Store logs/error.log important.log build/output.min.js

输入文件路径并点击测试,查看是否会被 Git 忽略

规则解析详情 — 当前测试路径的匹配情况
尚未解析规则或未进行测试
常见问题与知识点
.gitignore 规则的基本语法是什么?

.gitignore 文件使用 glob 模式匹配,基本规则:

  • # 开头的行为注释
  • 空行会被忽略
  • * 匹配零个或多个字符(不跨越目录)
  • ** 匹配任意层级的目录
  • ? 匹配单个字符
  • [abc] 匹配方括号中的任意字符
  • ! 开头表示取反(重新包含)
  • / 结尾表示只匹配目录
  • / 开头表示从仓库根目录匹配
为什么我的 .gitignore 规则不生效?

常见原因:

  1. 文件已被 Git 追踪:如果文件已经被 git add 或提交过,.gitignore 不会生效。需要先执行 git rm --cached 文件名 移除追踪。
  2. 规则顺序问题:后面的规则会覆盖前面的规则,取反规则 ! 必须放在忽略规则之后。
  3. 路径匹配问题:模式 *.log 匹配所有目录下的 .log 文件,而 /*.log 只匹配根目录下的。
  4. 目录规则logs/ 匹配目录,logs 同时匹配文件和目录。
双星号 ** 的作用是什么?

** 可以匹配任意层级的目录:

  • **/foo — 匹配任意位置的 foo 文件或目录
  • foo/** — 匹配 foo/ 目录下的所有内容
  • a/**/b — 匹配 a/ 下任意深度的 b
  • 单独的 ** — 匹配所有内容(通常用于取反场景)
如何忽略文件夹但保留其中的特定文件?

使用取反规则 !,这是经典用法:

# 忽略 logs 目录下的所有内容
logs/*
# 但保留 important.log
!logs/important.log

注意:取反规则必须放在忽略规则之后,且父目录不能被完全忽略。

.gitignore 可以放在子目录中吗?

可以。Git 支持在任意子目录中放置 .gitignore 文件,其规则仅作用于该目录及其子目录。规则中的 / 相对于该 .gitignore 所在的目录。

此外还有全局 .gitignore(通过 git config --global core.excludesFile 配置)和仓库级 .git/info/exclude

已经追踪的文件如何忽略?

如果文件已经被 Git 追踪,添加到 .gitignore 不会自动忽略它。需要:

  1. 从 Git 索引中移除(保留本地文件):git rm --cached 文件路径
  2. 提交这个移除操作
  3. 确保 .gitignore 中已添加相应规则

如果要移除整个目录:git rm --cached -r 目录名

如何检查某个文件是否被 .gitignore 忽略?

在命令行中使用:

git check-ignore -v 文件路径

如果有输出,说明该文件被忽略,并显示是哪条规则匹配的。本工具就是模拟这一功能,帮助你在不依赖 Git 命令行的情况下快速验证。