Git忽略文件的几种方式以及.gitignore文件的忽略规则详解

 更新时间:2026年03月09日 10:01:57   作者:Major_xx  
本文介绍了如何使用`.gitignore`文件来忽略不需要提交到版本库的文件,并详细说明了`.gitignore`文件的优先级以及常见的忽略规则示例

.gitignore文件

在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。

注意:

如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。

Git忽略规则以及优先级

详细的忽略规则可以参考官方英文文档

在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

  1. 从命令行中读取可用的忽略规则
  2. 当前目录定义的规则
  3. 父级目录定义的规则,依次递推,目录结构较高的.gitignore文件被较近的.gitignore文件中相同的配置所覆盖
  4. .git/info/exclude文件中定义的规则
  5. core.excludesfile中定义的全局规则

.gitignore文件忽略规则

  1. 空格不匹配任意文件,可作为分隔符,方便阅读。
  2. #用于注释,\表示转义(如需使用实体\,则要加引号"\")。
  3. *可以匹配任何字符(0或多个)。
  4. ?可以匹配单个字符。(不可以匹配/)
  5. /用于分隔目录:
    • /在开头时,表示从.gitignore文件所在的根目录开始匹配。
    • /在末尾时,只匹配目录及该目录下面的全部内容,否则同名的目录和文件都将匹配。
  6. !开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用!也不会再次被包含。
  7. []通常用于匹配一个字符列表,如:a[mn]z可匹配amz和anz。
  8. **用于匹配多级目录,如a/**/b可匹配a/ba/x/ba/x/y/b。注意:git 对于 .gitignore配置文件是按行从上到下进行规则匹配的。

常用匹配示例

  • #: 表示此为注释,将被Git忽略。
  • *:表示忽略所有。
  • */:表示忽略所有目录。
  • 1.txt: 忽略任意目录(当前目录即根目录及其子文件夹)下的1.txt的文件夹或同名文件,例如1.txt,/pojo/1.txt,/pojo/a/1.txt,若是文件夹则该文件夹下的所有内容都会被忽略。
  • *.txt: 忽略任意目录(当前目录即根目录及其子文件夹)下的所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略。
  • /1.txt:忽略根路径下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
  • /*.txt: 忽略根路径下的所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略 /pojo/1.txt。
  • pojo:忽略任意目录(当前目录即根目录及其子文件夹)下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
  • /pojo: 忽略根目录下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。
  • pojo/: 忽略目录 pojo下的全部内容;注意,不管是根目录下的/pojo/目录,还是某个目录下的 /child/pojo/,以及pojo文件夹里面的全部内容都会被忽略,同时忽略pojo文件夹,以pojo命名的文件不会忽略。
  • pojo/*:忽略当前路径下pojo文件夹下的全部内容,pojo文件夹不忽略。
  • /pojo/: 忽略根目录下的pojo文件夹,该文件夹下的所有内容都会被忽略,以pojo命名的文件不会忽略。
  • pojo/1.txt:忽略当前路径下的pojo下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo文件夹。
  • /pojo/1.txt:忽略根目录下的pojo文件下的1.txt的文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo文件夹。
  • pojo/*.txt: 忽略当前路径下的pojo文件夹下所有以.txt结尾的文件夹或文件,若是文件夹则该文件夹下的所有内容都会被忽略,不忽略pojo/common/1.txt,不忽略/a/pojo/1.txt,不忽略pojo文件夹。
  • pojo/1.txt/*:忽略当前路径下的pojo文件夹下的1.txt文件夹中的所有文件,1.txt文件夹不忽略。
  • **/pojo: 忽略任意目录下的pojo文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略。/pojo/pojo/1.txt/a/pojo/a/pojo/1.txta/b/pojo等。
  • a/**/b: 忽略当前路径下的以a文件夹为开始,中间可以有0个或任意个目录的b文件夹或同名文件,若是文件夹则该文件夹下的所有内容都会被忽略,a/ba/x/ba/x/y/ba/x/y/b/1.txt等。
  • /pojo/*!/pojo/1.txt: 忽略pojo目录下的所有文件但不忽略pojo目录下的1.txt文件,pojo文件夹不忽略。注意上面的/pojo/*不能写为/pojo/,否则父目录被前面的规则排除掉了,1.txt文件虽然加了!过滤规则,也不会生效!

有三种方法可以实现忽略Git中不想提交的文件

1、在Git项目中定义 .gitignore 文件(优先级最高,推荐!)

这种方式通过在项目的某个文件夹下定义 .gitignore 文件,在该文件中定义相应的忽略规则,来管理当前文件夹及其子文件夹下的文件的Git提交行为。

.gitignore 文件是可以提交到公有仓库中,这就为该项目下的所有开发者都共享一套定义好的忽略规则。

在 .gitingore 文件中,遵循相应的语法,在每一行指定一个忽略规则。如:

样例一:

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
mvnw
mvnw.cmd
.mvn


### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
logs/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

样例二:

######################
# Project Specific
######################
/target/www/**
/src/test/javascript/coverage/
/src/test/javascript/PhantomJS*/

######################
# Node
######################
/node/
node_tmp/
node_modules/
npm-debug.log.*

######################
# SASS
######################
.sass-cache/

######################
# Eclipse
######################
*.pydevproject
.project
.metadata
tmp/
tmp/**/*
*.tmp
*.bak
*.swp
*~.nib
local.properties
.classpath
.settings/
.loadpath
.factorypath
/src/main/resources/rebel.xml

# External tool builders
.externalToolBuilders/**

# Locally stored "Eclipse launch configurations"
*.launch

# CDT-specific
.cproject

# PDT-specific
.buildpath

######################
# Intellij
######################
HELP.md
.idea
*.iws
*.iml
*.ipr
mvnw
mvnw.cmd
.mvn
*.ids
*.orig
classes/

######################
# Visual Studio Code
######################
.vscode/

######################
# Maven
######################
/log/
target/

######################
# Gradle
######################
.gradle/
/build/

######################
# Package Files
######################
*.jar
*.war
*.ear
*.db

######################
# Windows
######################
# Windows image file caches
Thumbs.db

# Folder config file
Desktop.ini

######################
# Mac OSX
######################
.DS_Store
.svn

# Thumbnails
._*

# Files that might appear on external disk
.Spotlight-V100
.Trashes

######################
# Logs
######################
*.log

######################
# Others
######################
*.class
*.*~
*~
.merge_file*

######################
# Gradle Wrapper
######################
!gradle/wrapper/gradle-wrapper.jar

######################
# Maven Wrapper
######################
!.mvn/wrapper/maven-wrapper.jar

######################
# ESLint
######################
.eslintcache
/.apt_generated/

server/package-lock.json
server/mochawesome-report/

2、在Git项目的设置中指定排除文件

这种方式只是临时指定该项目的行为,需要编辑当前项目下的 .git/info/exclude 文件,然后将需要忽略提交的文件写入其中。

需要注意的是,这种方式指定的忽略文件的根目录是项目根目录。

3、定义Git全局的 .gitignore 文件

(个人使用方便,但是团队的话不适用,因为是在自己电脑设置的全局)

除了可以在项目中定义 .gitignore 文件外,还可以设置全局的 git .ignore 文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。

1) 创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是 git.ignore).

这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用户家目录下

git.ignore 文件模版内容如下:

# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# 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*
.classpath
.project
.settings
target
.idea
*.iml

2) 在.gitconfig 文件中引用忽略配置文件(此文件在 Windows 的家目录中)我的是在C:\Users\PC.gitconfig

[user]
	email = xuxin@wondertek.com.cn
	name = xuxin666
[credential "https://gitee.com"]
	provider = generic
[core]
	excludesfile = C:/Users/PC/git.ignore

注意:这里要使用“正斜线(/)”,不要使用“反斜线(\)”

如何检查自己写的ignore规则是否有效?

git check-ignore -v {文件或目录路径}

gitignore规则不生效

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

解决方法就是先修改.gitignore文件,之后在执行以下内容先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached . 
git add .
git commit -m 'update .gitignore'

同样的,已被.gitignore忽略的文件是无法加入版本库的。

解决方法:要纳入版本管理,先移除规则。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Web开发/设计人员应当知道的15个网站

    Web开发/设计人员应当知道的15个网站

    建个好网站绝非易事,工欲善其事必先利其器。本文编译了15个极其有用的网站,任何一位网站开发者或设计人员都应该收藏起来
    2011-05-05
  • 使用动画实现微信读书的换一批效果(两种方式)

    使用动画实现微信读书的换一批效果(两种方式)

    这篇文章主要介绍了使用动画实现微信读书的换一批效果,本文通过实例代码通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 一文详解VSCode安装配置使用(最新版超详细保姆级含插件)

    一文详解VSCode安装配置使用(最新版超详细保姆级含插件)

    安装VScode就很简单了,一路NEXT就可以了,重点是配置使用以及插件推荐,这篇文章主要给大家介绍了关于VSCode安装配置使用的相关资料,本文是最新版超详细保姆级含插件,需要的朋友可以参考下
    2023-05-05
  • ImageMagick免费开源图片批处理利器使用详解

    ImageMagick免费开源图片批处理利器使用详解

    这篇文章主要为大家介绍了ImageMagick免费开源图片批处理利器使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • IntelliJ IDEA 性能优化的教程详解

    IntelliJ IDEA 性能优化的教程详解

    这篇文章主要介绍了IntelliJ IDEA 性能优化的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 使用Git Hook技术定义和校验代码提交模板方式

    使用Git Hook技术定义和校验代码提交模板方式

    这篇文章主要介绍了使用Git Hook技术定义和校验代码提交模板方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • select下拉菜单实现二级联动效果

    select下拉菜单实现二级联动效果

    这篇文章主要介绍了select下拉菜单实现二级联动效果,在一些项目开发中经常会遇到这样的需求,今天小编通过实例代码给大家讲解,需要的朋友可以参考下
    2019-10-10
  • 完美解决浏览器输入http被自动跳转至https问题

    完美解决浏览器输入http被自动跳转至https问题

    很多朋友问小编浏览器输入http被自动跳转至https问题,到底该怎么解决呢,其实解决方法很简单,主要关闭浏览器的HSTS功能就可以了,关于http自动跳转至https的解决方法跟随小编一起看看吧
    2021-05-05
  • 通过Cursor工具使用GPT-4的方法详解

    通过Cursor工具使用GPT-4的方法详解

    Cursor 是集成了 GPT-4 的 IDE 工具,目前免费并且无需 API Key,支持 Win、Mac、Linux 平台,可以按要求生成代码,或者让 AI 帮助优化代码,分析代码,这篇文章主要介绍了通过Cursor工具使用GPT-4的方法,需要的朋友可以参考下
    2023-05-05
  • 在Visual Studio中使用GIT进行源码管理

    在Visual Studio中使用GIT进行源码管理

    这篇文章介绍了在Visual Studio中使用GIT进行源码管理的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论