深色模式
.gitignore 语法
语法
#
:以 # 开头的行为注释行,Git 会忽略这些行;/
:在 .gitignore 文件中使用 / 表示目录层级的分隔符;!
:表示取反,即不忽略某个文件或目录;*
:表示匹配任意数量的字符,不包括 /;**
:表示匹配任意数量的字符,包括 /;?
:表示匹配一个任意字符,不包括 /;[abc]
:表示匹配括号中任意一个字符;[a-z]
:表示匹配 a 到 z 中任意一个字符;[!abc]
:表示匹配除括号中的字符外的任意一个字符。
举例
# 忽略所有 .log 文件
*.log
# 不忽略 debug.log 文件
!debug.log
# 忽略 node_modules 目录
node_modules/
# 不忽略 node_modules 下的 my-module 目录
!node_modules/my-module/
# 忽略 .DS_Store 文件
.DS_Store
# 忽略 .env 文件
.env
# 忽略所有 .txt 文件,但不忽略 doc.txt 和 notes.txt 文件
*.txt
!doc.txt
!notes.txt
注意
.gitignore 文件仅对尚未加入 Git 版本控制的文件有效。如果某个文件已经被 Git 纳入版本控制,那么即使它被添加到 .gitignore 文件中,也不会被忽略。此时需要使用 git rm --cached <file>
命令将其从 Git 版本控制中删除。
带/
与不带/
在 .gitignore 中,尾部带 / 与不带 / 是有区别的。
如果一个规则以 / 结尾,那么它将只匹配目录而非文件,例如:
foo/ # 忽略名为 foo 的目录,但不忽略 foo/bar.txt 文件
而如果一个规则没有以 / 结尾,则既可以匹配文件也可以匹配目录,例如:
*.log # 忽略所有以 .log 结尾的文件,包括在子目录中的文件
需要注意的是,如果你想同时忽略一个目录及其下的所有内容,应该使用以下形式:
foo/ # 忽略名为 foo 的目录及其下的所有内容
也就是说,尾部带 / 的规则只能匹配目录,不能同时匹配目录和文件。如果你需要忽略某个目录下的所有内容,应该在该规则的末尾加上 /。
另外,如果你想忽略文件名中包含某个特定字符的文件,例如忽略名为 foo-bar.txt 的文件,可以使用如下规则:
*foo*bar* # 忽略包含 foo 和 bar 的文件名
这个规则既可以匹配文件也可以匹配目录。