当前位置: 首页 > news >正文

.gitignore 的匹配规则

.gitignore 是使用 Git 的日常开发时一个非常常见的文件。它负责告诉 Git 哪些文件或目录应当被忽略,不被加入版本控制。必须掌握。

基本规则

  • .gitignore 文件对其所在目录以及所有子目录生效。

  • 每行一条规则:

    • 空行:无意义。
    • # 开头:注释。
  • 匹配的是相对路径,相对于 .gitignore 所在目录的路径。

路径匹配规则

不带 / 的规则

log

匹配任意层级下名为 log 的文件或目录:

  • log
  • app/log
  • src/debug/log

/ 开头的规则

/log

仅匹配当前目录下的 log,不会影响子目录:

  • 匹配:./log
  • 不匹配:./src/log

如果 .gitignore 在仓库根目录,则仅忽略根目录的该项。

/ 结尾的规则(指定目录)

cache/

表示忽略 cache 目录及其全部内容:

  • 匹配:cache/, cache/tmp/a.txt
  • 不匹配:cache.log

通配符模式

* 匹配任意字符(不含 /

*.log

匹配所有 .log 文件:

  • a.log
  • error.log
  • dir/debug.log

? 匹配单个字符(不含 /

config?.json
  • 匹配:config1.json, configA.json
  • 不匹配:config10.json

[] 匹配字符集合

file[0-9].txt
  • 匹配:file0.txt ~ file9.txt
  • 不匹配:file10.txt

** 的强大跨目录匹配

** 可以匹配任意多层目录。

logs/**/debug.log

匹配:

  • logs/debug.log
  • logs/a/debug.log
  • logs/a/b/c/debug.log

常用写法:

**/temp/
**/*.log

含义分别为:所有层级下的 temp 目录;所有层级下的 .log 文件。

取反规则:! 用于“取消忽略”

.gitignore 中,以 ! 开头的规则表示 例外,即“不忽略某些文件”。

示例:

*.log
!important.log

表示忽略所有 .log,但保留 important.log

注意两点:

  1. 取反规则只有在前面已被忽略的前提下才有效。
  2. 若目录本身被忽略,则目录内部的文件不能通过 ! 被“救回”:

错误示例:

cache/
!cache/keep

keep 无法被恢复,因为 cache/ 整个被忽略。

正确示例:

cache/*
!cache/.gitkeep

匹配顺序与优先级

  • .gitignore 从上到下依次处理规则。
  • 后面的规则会覆盖前面的规则。

示例:

*.log          # 忽略所有 .log
!main.log      # 保留 main.log
/debug/main.log  # 再次忽略 debug 目录下的 main.log

多个 .gitignore 配合使用

Git 会综合以下来源的忽略规则:

  • 仓库根目录的 .gitignore
  • 子目录中的 .gitignore
  • 全局 Git 忽略文件(如 ~/.config/git/ignore
  • Git 内置忽略(如 .git/info/exclude)

路径始终相对当前 .gitignore 解析。

常见项目的 .gitignore 示例

Node.js / 前端项目

node_modules/
dist/
build/*.log
npm-debug.log*
yarn-debug.log*.env
.env.local

Python 项目

__pycache__/
*.py[cod]
venv/
.env
*.sqlite3
http://www.jsqmd.com/news/71415/

相关文章:

  • 无法在Debian13 VSCode中使用fcitx5输入中文
  • python基础
  • Debian 13安装rime中文输入法
  • 中介者模式
  • [LabVIEW随笔-10] -基础知识3
  • 0_C++的基础语法(上)
  • Codeforces Round 1069 (Div. 2)
  • Old-Java类集框架随笔
  • linux进线程
  • 第51天(中等题 数据结构)
  • 对《AI元人文构想:从“伦理规范”向“技术合标”的范式扩展》的评价与展望(深化版)
  • Claude使用体验
  • 适合 Linux 强者的方式 freertos学习
  • 网络故障具体排错
  • Git 中文文件名显示为转义码(乱码)的解决方案
  • 真相:大量硬件场景 根本跑不了 Linux
  • Windows-GameBar-ErrorLog
  • S7-PLCSIM Advanced V6.0同网段不同电脑之间网络配置
  • 记录一些波波的话
  • 从“能用”到“卓越”:7个实战技巧提升C#代码质量
  • 2025最新结构胶品牌推荐!国内优质结构胶权威榜单发布,资质服务双优助力高品质建筑山东结构胶服务公司推荐 - 全局中转站
  • 2025最新玻璃胶推荐!国内优质玻璃胶品牌权威榜单发布,资质与性能双优助力高效密封 - 全局中转站
  • 2025最新免钉胶推荐!国内优质免钉胶品牌权威榜单发布,环保性能与粘结强度双优助力高效装修 - 全局中转站
  • 2025 最新美缝剂品牌 / 厂家 TOP5 评测!环保品质 + 技术创新权威榜单发布,匠心赋能家居装饰新体验 - 全局中转站
  • AI元人文构想:从“伦理规范”向“技术合标”的范式扩展
  • containerd base_runtime_spec
  • Luogu P9165 「INOH」Round 1 - 意外
  • 大作业笔记-2
  • xshell 备份配置
  • AshPostgres 政策绕过漏洞:空原子更新操作可能触发副作用