详情

首页手游攻略 Git忽略文件的几种方式以及.gitignore文件的忽略规则完整指南

Git忽略文件的几种方式以及.gitignore文件的忽略规则完整指南

佚名 2026-09-08 20:50:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Git忽略文件的几种方式以及.gitignore文件的忽略规则”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • .gitignore文件
  • Git忽略规则以及优先级
  • .gitignore文件忽略规则
  • 常用匹配示例
  • 有三种方法能够完成忽略Git中不想提交的文件
    • 1、在Git项目中定义 .gitignore 文件(优先级最高,建议!)
    • 2、在Git项目的设置中指定排除文件
    • 3、定义Git全局的 .gitignore 文件
  • 如何检查自己写的ignore规则是否有效?
    • 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:UsersPC.gitconfig

        [user]
            email = [email protected]
            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忽略的文件是无法加入版本库的。

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

        总结

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

        您可能感兴趣的文章:

        • Git中忽略文件机制的.gitignore与.git/info/exclude两种方式详解
        • Git忽略文件.gitignore操作方法指南
        • Git中采用.gitignore忽略文件的推送方式
        • git设置忽略文件.gitignore的方法

        相关资讯
        点击查看更多
        游戏推荐
        推荐专题
        热门阅读
        推荐下载