描述
一个 .gitignore 文件指定 Git 应该忽略哪些未跟踪文件的。已经被 Git 跟踪的文件不受影响。.gitignore 文件可以忽略 .gitignore 文件本身,也可以有多个 .gitignore 文件。
模式格式
-
空行不匹配任何文件,因此它可以用作可读性的分隔符。
-
以 # 开头的行用作注释。
-
末尾的空格将被忽略,除非它们用反斜杠 ("\")引用。
-
一个可选的前缀 !,它否定了模式;任何被先前模式排除的匹配文件将再次包含在内。如果排除了该文件的父目录,则无法重新包含该文件。对于以“!”字面值开头的模式,在第一个“!”前面加一个反斜杠(“\”),例如,\!important!.txt
-
斜杠 / 用作目录分隔符。
-
如果在模式的开头或中间(或两者)有一个分隔符,则该模式相对于特定的 .gitignore 文件本身的目录级别。否则,模式也可以在 .gitignore 级别以下的任何级别进行匹配。
-
如果模式末尾有分隔符,那么模式将只匹配目录,否则模式可以同时匹配文件和目录。
例如
目录
├── .gitignore(文件)
├── doc(目录)
│ └── frotz(目录)
├── frotz(目录)
└── frotz(文件)
模式 frotz
匹配 frotz
目录、 frotz
文件和 doc/frotz
目录;
模式 frotz/
匹配 frotz
目录和 doc/frotz
目录,但不匹配 frotz
文件;
模式 /frotz
匹配 frotz
目录和 frotz
文件,但不匹配 doc/frotz
目录;
模式 /frotz/
匹配 frotz
目录,但不匹配 frotz
文件和 doc/frotz
目录;
注意(所有路径都是相对于 .gitignore 文件的)。
-
星号 * 匹配除斜杠以外的任何内容。
-
问号 ? 匹配除斜杠之外的任何一个字符。
-
范围表示法,例如 [a- zA -Z] ,可用于匹配范围中的一个字符。
在匹配完整路径名的模式中,两个连续的星号(“**”)可能有特殊含义:
-
前导的 ** 后面跟一个斜杠表示在所有目录中匹配。例如,
**/frotz
在任何地方匹配文件或目录frotz
,与frotz
模式相同。 -
末尾的 ** 匹配里面的所有内容。例如,
frotz/**
匹配目录frotz
内的所有文件,相对于 .gitignore 文件的位置,具有无限深度。 -
斜杠后跟两个连续的星号然后斜杠,匹配零个或多个目录。例如,
a/**/b
匹配a/b
、a/x/b
、a/x/y/b
等。 -
其他连续的星号被视为常规星号,将根据之前的规则进行匹配。
独享式忽略文件
文件 .gitignore 设置的文件忽略是共享式的,一旦将其作为版本库的一部分推送到远程版本库,其他人拉取后就会在他人的版本库中生效。
独享式文件忽略可以通过 .git/info/exclude
或 core.excludesfile
来设置,两者分别对应仅某个具体本地版本库生效和全部本地版本库生效。