625 字
2 分钟
.gitignore 忽略清单
.gitignore 忽略清单文件负责匹配那些不希望被 git 托管的文件。
将不需要被 git 管理的文件匹配规则添加到此文件中,在执行 git 命令的时侯,git 就会忽略这些文件。
使用
在项目根目录下创建名为 .gitignore 的清单文件,配置需要忽略的文件列表
.gitignore文件更新时若目标文件已暂存,需要移除目标文件的暂存状态才能生效
规则语法
在 .gitignore 文件中每一行均视为一条文件匹配规则。每条规则均基本以glob 模式进行匹配。
关于 glob 模式可参考 glob文件匹配规则。
这里仅列举常用规则:
- 以
#开头的行视为注释行,不会计入匹配规则 - 以
/开头表示根目录,反之则指向.gitignore文件所在目录内的所有目录 - 以
/结尾表示目录,将会忽略目录以及目录下的所有子文件。若不以/结尾则会因为不确定是目录还是文件,而忽略目录的同时忽略掉以此命名的文件 /分割每一层目录,在每层目录中,通配符*可以匹配任意多个字符**可以视为任意层数目录,因此a/**/1可以匹配到a/1、a/b/1、a/b/c/1?可以视为任意单个字符!开头表示不忽略此行规则所匹配的文件[]包含单个字符的匹配列表,例如[ab]指代此字符允许为a或b,[0-9]指代此字符允许为任意数字
示例
下面通过示例直观解释
# .gitignore 的 注释# 内容# 忽略所有 .js 后缀的文件*.js# 忽略所有的 .js 和 .ts 文件*.[jt]s# 忽略所有的 test1.js、test2.js ... 文件test[0-9].js# 忽略所有的 test1.js、test2.js、testa.js、testb.js ... 文件test?.js# 忽略除 mari.js 外的其他文件!mari.js# 忽略项目中所有的 data 文件/目录data# 忽略项目中所有的 data 目录,不忽略 data 文件data/# 仅忽略项目根目录下的 data 文件/目录,不包括 src/data/data# 仅忽略项目根目录下的 data 目录,不忽略 data 文件/data/# 忽略项目根目录下的 data 目录内的第一级子文件中以 .yml 为后缀的文件,不包括 data/my/config.yml/data/*.yml # 忽略doc目录下所有 .txt 后缀的文件,但不包括doc子目录的 .txt 的文件# 忽略项目根目录下的 data 目录中的所有以 .yml 为后缀的文件/data/**/*.yml# 忽略具体的 /data/config/base.yml 文件/data/config/base.yml规则冲突
这里有一个需求: :忽略目录 src/plugin 下除了 src/plugin/@help 和 src/plugin/tools 以外的目录
本人依照惯性思维进行了如下的 ignore 规则配置:
/src/plugins/!/src/plugins/@help/!/src/plugins/tools/结果发现后两条取反没有生效,@help 与 tools 目录依然被 git 过滤掉了。
这里就牵扯到了规则文件的一个坑点,即:
git 对于配置文件规则的读取是按照从上到下进行规则匹配的,这代表着当前面的规则匹配范围更大时,后面的规则将不再生效。
显然 /src/plugins/ 在这里的范围是要大于后续两条取反规则的,导致了后两条规则无效化。
怎么解决这个问题呢?只需要添加一个 * 即可:
# /src/plugins/* 的范围小于后两条,取反规则成功生效/src/plugins/*!/src/plugins/@help/!/src/plugins/tools/ 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
.gitignore 忽略清单
https://marrydream.top/posts/git/gitignore-忽略清单/ 部分信息可能已经过时
相关文章 智能推荐