在工程中,并不是所有文件都需要保存到版本库中,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
标识 | 说明 | 举例 |
---|---|---|
# 或空格 | 空行或以#开头的行将被git忽略,可以用作注释 | ### IntelliJ IDEA ### |
* | 代表零个或多个任意字符 | *.txt会匹配所有后缀为txt的文件 |
? | 代表一个任意字符 | ?.txt 会匹配a.txt 但不会匹配ab.txt |
[] | 可以匹配括号内的任一字符 | [abc].txt 会匹配a.txt,b.txt和c.txt |
** | 两个星号 ** 表示任意中间目录 | **/foo会匹配 foo,a/foo,a/b/foo等 |
前缀! | 表示不忽略 | *.txt和!important.txt会忽略所有的.txt文件,但不会忽略important.txt |
前缀/ | 表示只忽略当前目录下的文件 | /test 会忽略当前目录下的test文件,但不会忽略a/test |
后缀/ | 表示只忽略目录 | test/ 会忽略test目录,但不会忽略test文件 |
温馨提示
/
在文件夹名前,/test表示根目录下的某个文件,/test/表示忽略根目录下的/test/目录的全部内容,而test/表示忽略文件夹test下的全部内容,不管是根目录下的/test/,还是某个子目录下的test文件夹,比如:/child/test,都会被忽略
在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
1、从命令行中读取可用的忽略规则
2、当前目录定义的规则
3、父级目录定义的规则,依次递推
4、$GIT_DIR/info/exclude 文件中定义的规则
5、core.excludesfile中定义的全局规则
git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效
1、.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。
相关git命令:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
2、想添加一个文件到git,发现添加不了,原因是这个文件被.gitignore忽略了
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.
如果你确实想添加该文件,可以用-f强制添加到Git,或者是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
build/
.vscode/
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
build/
.vscode/