.gitignore
语法规则
- 使用
#
来编写注释,注释的内容不会被git视为忽略规则
- 忽略规则以
/
结尾表示忽略的对象是一个目录,而不是文件
- 忽略规则以
/
开头则表示忽略的对象的路径是相对于项目的根目录,如果某个规则的开头不是/
,那么这条规则的匹配路径会相对于当前.gitignore
文件的位置
- 在忽略规则最开头加上
!
表示不忽略该规则指定的对象(相当于取反)
- 可以使用标准glob模式匹配(glob模式就是Linux的shell下简化的正则表达式)
glob模式规则
*
表示匹配0个或任意多个字符
?
表示匹配1个任意的字符
[]
表示匹配方括号中的任意一个字符,例如[abc]
要么只匹配一个a,要么只匹配一个b,要么只匹配一个c。还可以使用范围表示,例如[0-9]
表示匹配所有的一位数字
**
表示匹配任意多层的中间目录,例如a/**z
可匹配a/c/z
,也可匹配a/c/b/z
等等
为什么我设置的忽略规则不生效
有朋友可能遇到过这种情况,在自己的某个项目已经做了一段时间后,想忽略一些项目中的文件和目录,中途增加了一个.gitignore
文件,但是发现commit后,明明设置了忽略的文件仍然被git提交了。这是因为在这条忽略规则添加之前,git就已经跟踪了该文件,要想git应用你编写的全新的忽略规则,你需要先执行git rm -r --cached .
(注意该命令最后还有一个点),然后将所有文件添加到暂存区,再commit,这样你编写的新的忽略规则才会生效,具体过程如下:
1 2 3
| git rm -r --cached . git add . git commit -m "update .gitignore"
|
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 忽略项目根目录下的build文件夹及其内部所有的子文件夹和文件 /build/
# 忽略项目根目录下的build文件夹内部所有的子文件夹和文件,注意,和上面一条不同的是 # 本规则不会忽略build文件夹本身 /build/*
# 忽略项目中所有的zip文件 *.zip
# 忽略项目中所有log文件夹及其中的所有子文件夹和文件 **/log/
# 忽略构建版本为3以下的apk文件 /build/release_[0-2].*.apk
# 忽略macOS在目录中生成的.DS_Store文件 **/.DS_Store
|