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/