项目中并不是所有文件都需要保存到版本库中的,例如“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示例
HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache### IntelliJ IDEA ### .idea *.iws *.iml *.ipr### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/### VS Code ### .vscode/# 忽略所有 .pyc 文件,它们是Python编译后的字节码 *.pyc # 忽略所有 .pyo 文件,它们是Python优化后的字节码 *.pyo # 忽略所有 .env 文件,这些文件通常包含敏感信息 *.env # 忽略所有日志文件和文件夹 *.log logs/#Built application files *.apk *.ap_# Files for the Dalvik VM *.dex# Java class files *.class# Generated files */bin/ */gen/ */out/# Gradle files .gradle/ */build/ gradlew gradlew.bat# Local configuration file (sdk path, etc) local.properties# Proguard folder generated by Eclipse proguard/# Log Files *.log# Android Studio Navigation editor temp files .navigation/# Android Studio captures folder captures/# Intellij#gradle wrapper gradle/#some local files */.settings/ */.DS_Store .DS_Store */.idea/ .idea/ gradlew gradlew.bat#tem *.tem *.temp #.swp *.*~ ~*.*#打包的文件,Package Files *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar# virtual machine crash logs, #see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid*#iOS相关过滤规则 # Xcode .DS_Store #*/build/* *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata profile *.moved-aside DerivedData .idea/ *.hmap *.xccheckout *.xcworkspace !default.xcworkspace#CocoaPods Pods !Podfile !Podfile.lock#unity项目中使用的忽略规则 #/[Ll]ibrary/ #/[Tt]emp/ #/[Oo]bj/ #/[Bb]uild/ #/[Pp]rojectSettings/ProjectVersion.txt *.csproj *.unityproj *.sln *.suo *.tmp *.userprefs *.pidb *.booproj *.pidb.meta sysinfo.txt# 忽略特定文件类型 *.bak