• Git忽略文件的几种方法,以及.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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    样例二:

    ######################
    # 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/
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

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

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

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    gitignore规则不生效

    .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
    解决方法就是先修改.gitignore文件,之后在执行以下内容先把本地缓存删除(改变成未track状态),然后再提交:

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

    同样的,已被.gitignore忽略的文件是无法加入版本库的。
    解决方法:要纳入版本管理,先移除规则。

  • 相关阅读:
    Golang项目实战(二)
    神探大战观影解说
    JAVASE语法零基础——static成员和代码块
    两个node服务共同修改一个计数文件,互相监控服务是否停止
    kafka 消费者的消费策略以及再平衡1
    文献解读|利用比较转录组和基因表达分析北极蓝藻耐盐机制
    含文档+PPT+源码等]精品微信小程序慢性疾病+后台管理系统|前后分离VUE[包运行成功]程序设计源码计算机毕设
    1、error LNK2019: 无法解析的外部符号“struct ********“
    顾樵 量子力学I 导读(1)
    电力电缆故障技术与解决
  • 原文地址:https://blog.csdn.net/qq_41428418/article/details/132737503