背景: 在一些项目中我并不希望本地仓库的所有文件都上传到远程仓库,而是有选择的上传,因此git引入了.gitignore文件,使用该文件来选择性的上传文件
1. .gitignore文件内容的语法说明:
- 注释使用#开头,后面跟注释内容
- 感叹号“ !”,不忽略指定的文件或者文件夹,如:!a.txt,不忽视a.txt文件
- 星号 “” ,匹配多个字符,如:.log ,忽视所有后缀为.log的文件
- 问号“?”,匹配除 ‘/’ 外的任意一个字符
- 方括号"[XXXX]",匹配多个列表中的字符
- 斜杠后紧跟两个连续的星号“**”,表示多级目录
- 斜杠“/”,斜杠在前:匹配项目跟目录,如:/name,则表示指定路径下的名为name的文件或者文件夹
- 斜杠“/”,斜杠在后:匹配项目跟目录,如:name/,则表示无指定路径下在名为name的文件夹
2.案例
- 只上传一个空文件夹,不想上传里面的文件,如:项目下的logs文件夹
解决办法:在logs里面创建一个.gitignore文件,里面写入:
!.gitignore
或者 logs/*
- 上传某个文件夹下的某个文件,其他文件忽视,如:logs/xxx.log
解决办法:在logs里面创建一个.gitignore文件,里面写入:
!.gitignore
! xxx.log
- 不想上传某个目录下mtk文件或者是mtk的文件夹,在可以在该目录下创建.gitignore文件,里面写入:
!.gitignore
mtk
- 不想上传某个目录下载smock文件夹,则可以在该目录下创建.gitignore文件,里面写入:
!.gitignore
smock/
3. .gitignore生效时性
.gitignore文件只会咋第一次提交的时候写入缓存,如果你在第一次提交项目的时候忘记了写.gitignore文件,有的无用文件已经上传到git上了,后来在补充.gitignore文件对于已经上传到git上的文件是无效的,意思是你再次提交代码时,第一次提交提交过的文件是不会被忽视的,还会存储在git上
解决办法:
git rm -r --cached #清除所有的缓存,再次提交代码时,.gitignore就可以生效了