Git中的ignore忽略文件
1.背景
在项目中,并不是所有文件都要进行版本追踪(如日志文件、node_modules等)。使用.gitignore
是最简单配置git忽略文件版本追踪的方式。
2.怎么用
(1)在项目根目录创建 .gitignore 文件。(注意:不一定非要放在项目根目录,这样写是为了让项目下的所有文件都生效)
(2)用文本编辑器打开文件,进行配置:
- 每项配置独占一行。
- 每行的内容可以是:文件/目录 的名称、路径 或 它们的模式匹配。
3.模式匹配
- 空行不匹配任何文件,因此常用作分隔符(以方便阅读)
#
用于注释,\
表示转义(如对a!bc.txt
,需改为a\!bc.txt
)*
可以匹配任何字符(0或多次),?
可以匹配任何字符(1次)。(注意:它们都不可以匹配/
)- 用于分隔目录:
- 当
/
在开头时,表示从项目根目录开始匹配。否则,所有级都将匹配。举例:/abc
只能匹配/abc
,不能匹配/x/abc
或/x/y/abc
等 - 当
/
在末尾时,只匹配目录,否则,则同名的目录和文件都将匹配。举例:/abc/
只能匹配/abc
目录,不能匹配/abc
文件。abc/
能匹配/abc/
或/x/abc/
或/x/y/abc/
等,不能匹配/abc
或/x/abc
等
- 当
- 原先被排除的文件,使用
!
模式后该文件将会重新被包含。但如果了该文件的父级目录被排除了,那么使用!
也不会再次被包含(这个细节要特别注意) []
通常用于匹配一个字符列表,如:a[mn]z
可匹配amz
和anz
**
用于匹配多级目录,如a/**/b
可匹配"a/b"
,"a/x/b"
,"a/x/y/b"
等
4.示例
4.1 忽略所有文件
4.2 忽略所有文件夹
4.3 忽略public文件夹下的所有文件,除了favicon.ico文件
4.4 只保留public目录下的a{一个字符}z.后缀名的所有文件
5.ignore规则检查
git check-ignore -v {文件或目录路径}
;有输出则表示这个 {文件或目录路径} 或目录是被忽略的(如下图)
6.遇到gitignore失效怎么办
6.1 文件已经被Git跟踪
如果在设置.gitignore
之前,文件已经被Git跟踪并提交过一次,那么.gitignore
对这个文件将不起作用。需要先使用以下命令将文件从Git仓库中移除:
git rm --cached <file>
6.2 .gitignore文件位置不正确
请确保.gitignore
文件位于Git项目的根目录下,并且文件名为.gitignore
。
6.3 文件路径错误
请确认.gitignore
中指定的文件路径或模式是正确的。可以使用相对路径或绝对路径进行指定。
6.4 缓存未清除
如果之前的缓存没有清除,.gitignore
文件的更改可能不会立即生效。可以尝试清除Git缓存:
git rm -r --cached .
git add .
git commit -m "Apply .gitignore"
6.5 使用git check-ignore命令
这个命令可以帮助你检查Git是否忽略了特定的文件或路径:
git check-ignore -v <file-or-directory-path>