gitignore pattern format
网上虽然能搜到很多讲解 gitignore 模式匹配格式的博客,但它们大都不全或者不太清楚,要彻底搞明白还得直接看官方文档啊!
PATTERN FORMAT
翻译自:https://git-scm.com/docs/gitignore PATTERN FORMAT 一节。
空行不匹配任何文件,因此可以用空行增加可读性。
以
#开头的一行是注释,用\进行转义。末尾的空格将被忽略,除非在空格前用
\转义。可选前缀
!表示否定,若匹配的文件被之前的模式忽略了,则它将被重新包含回来;但是,如果某文件的父目录被忽略了,则不能重新包含该文件,这是因为 git 出于性能的考虑不会检索被忽略的目录下的文件;
用
\进行转义。/用作目录的分隔符,可能出现在模式串的开头、中间或结尾。- 若
/出现在模式串开头或中间(或两者皆有),则模式串匹配相对于.gitignore所在位置的路径;否则模式串将匹配.gitignore位置以下的任何层级。 - 若
/出现在模式串的结尾,则模式串只会匹配目录;否则模式串既会匹配目录,也会匹配文件。 - 举个例子,模式串
doc/frotz/匹配doc/frotz目录,但不匹配a/doc/frotz目录;然而模式串frotz/会匹配frotz和a/frotz目录。
- 若
一个星号
*匹配除了/以外的任意字符串;一个问号?匹配除了/以外的任意单个字符;区间表示,如[a-zA-Z],可以用于匹配任何一个区间范围内的字符。两个星号
**匹配完整路径名,有一些特殊含义:- 以
**开头并紧接一个/表示在任何目录下匹配。例如**/foo将匹配任意位置的foo文件或目录,与foo模式串效果相同;**/foo/bar匹配任何在某foo目录下的bar文件或目录。 - 以
/**结尾表示匹配目录下的任何东西。例如abc/**匹配所有在abc目录(相对于.gitignore)下的任何文件,不限目录深度。 /**/表示匹配 0 个或多个目录层级。例如a/**/b能匹配a/b、a/x/b、a/x/y/b等等。- 其他连续两个星号的用法将被视为一个星号的用法。
- 以
常见用法
有了上一节的原理支撑,一些常见的需求就能顺手写出了。
忽略项目中所有
.DS_Store文件(mac 用户表示很赞)1
.DS_Store忽略项目中所有
ckpt目录(不把训练时保存的 checkpoint 加入 git)1
ckpt/同理,常用于忽略
__pycache__目录、.idea目录等配置性目录。忽略
/data/目录(不把数据集加入 git)1
/data/忽略目录
foo下所有的model.pt(训练好的模型太大了,不适于放入 git)1
/foo/**/model.pt
gitignore pattern format
https://xyfjason.github.io/blog-main/2022/02/11/gitignore-pattern-format/