文件忽略
1.介绍
如果想将某个文件保留在项目中,又不想让它受到Git的跟踪管理,那么,我们可以使用.gitignore文件。只需要先创建该文件,然后添加到项目的根目录中,最后将我们想要忽略(让Git不进行跟踪)的文件名称填写到该文件中即可
2.应该忽略那些文件
3.注意
.gitignore对已经被使用git进行版本控制的文件无效,需要先使用git rm --cached取消对这个文件的版本控制才行
git rm --cached [文件名]
执行完上面的git rm命令后,在更新.gitignore文件就可以生效了
4.忽略优先级
- 命令行指定的忽略规则:通过git add -f <file>强制添加的文件会无视任何忽略规则,始终被跟踪
- .gitignore文件中的否定规则:在当前路径中定义的.gitignore具有较高优先级,仅对所在目录及其子目录生效
- 子目录中的.gitignore文件:子目录的.gitignore规则比父目录的更具体,会覆盖父目录中冲突的规则
- 父目录中的.gitignore文件:根目录的.gitignore适用于整个仓库,子目录未特殊指定的文件会遵循根目录规则
- .git/info/exclude文件:仓库本地的忽略规则,不会提交到版本库,仅对当前仓库有效
- 全局.gitignore 文件:通过git config --global core.excludesfile配置的全局忽略规则,对所有仓库有效
5.忽略规则的匹配语法
注释
以#开头的行被视为注释,Git会忽略这些行
通配符
- *:匹配任意数量(包括零个)的任意字符
- ?:匹配单个任意字符
- [abc]:匹配括号内的任何一个字符
- [0-9]或[a-z]:范围匹配,匹配括号内指定范围内的字符
路径匹配
- /:在规则前面表示路径,如/aaa.txt表示当前.gitignore文件所在的路径下的aaa.txt文件(不包含子目录的aaa.txt文件)
- /:在规则末尾表示目录,如build/表示忽略名为build的目录及其子内容
- 如果规则没有以/结尾,则表示既匹配文件,也匹配目录名
否定匹配
在规则前添加!符号可以取消某个匹配规则,即不忽略符合该规则的文件或目录。如!aaa.txt表示即使有其他规则忽略了所有.txt文件,也不会忽略名为aaa.txt的文件
相对路径与绝对路径
.gitignore文件中的路径规则默认是相对于.gitignore文件所在目录的路径。如/aaa.txt表示当前.gitignore文件所在的路径中的aaa.txt文件。aaa.txt(没加/)则表示当前.gitignore文件所在的路径中的aaa.txt以及所有后代路径中的aaa.txt文件
多个规则顺序
Git按照.gitignore文件中规则的顺序进行处理,一旦找到匹配项,后续规则将不再对同一文件进行检查
如果一个文件或目录同时符合多个规则,则优先级较高的规则生效(通常是指令出现较早的规则)