git--.gitignore--使用/详解/实例

发布于:2024-05-10 ⋅ 阅读:(21) ⋅ 点赞:(0)

简介
本文介绍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示例

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