简介
本文介绍git的.gitignore忽略文件的用法。
项目中并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。
忽略某个文件(不提交到版本库的方法):在Git工作区的根目录下创建一个.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
建议忽略的文件
如下文件建议忽略(不上传到版本仓库):
- 操作系统自动生成的文件,比如缩略图等
- 编译生成的中间文件,可执行文件等。
- 自己的带有敏感信息的配置文件,比如存放口令的配置文件
优先级
Git有多个地方可以配置忽略规则,它的优先级如下(由高到低):
- 命令行中的忽略规则,从上往下依次读取
- 当前目录定义的规则(当前目录的.gitignore文件)
- 父级目录定义的规则(父目录的.gitignore文件)
- $GIT_DIR/info/exclude 文件中定义的规则
- core.excludesfile中定义的全局规则
.gitignore匹配语法
采用的匹配规则是:globs。
- **
- 匹配多级目录,可在开始,中间,结束
- *
- 匹配零个或多个字符
- ?
- 匹配单个字符
- []
- 匹配单个字符列表
- 空格
- 不匹配任意文件,可作为分隔符,可用反斜杠转义
- ! 开头
- 表示否定,该文件将会再次被包含。如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。
- 可以使用反斜杠进行转义
- / 结束
- 只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
- / 开始
- 匹配项目根目录
- 不包含斜杠
- 它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
.gitignore不生效
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法:
git rm -r --cached . git add . git commit -m .gitignore git push origin master
检查.gitignore规则
如果发现.gitignore有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
$ git check-ignore -v HelloWorld.class .gitignore:1:*.class HelloWorld.class
可以看到HelloWorld.class匹配到了我们的第一条*.class的忽略规则所以文件被忽略了。
示例
Java项目的.gitignore示例
### maven ### **/.mvn/ **/target/ ### gradle ### **/.gradle/ **/build/ ### IntelliJ IDEA ### **/.idea/ **/*.iws **/*.iml **/*.ipr ### VS Code ### .vscode/ ### NetBeans ### /nbproject/private/ /build/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache
前端项目的.gitignore示例
.DS_Store **/node_modules **/dist # local env files .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* # Editor directories and files **/.idea **/.vscode *.suo *.ntvs* *.njsproj *.sln *.sw?
Python项目的.gitignore示例
.idea/ # dotenv .env # virtualenv .venv venv/ ENV/ # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover .hypothesis/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg
请先
!