编程网

git .gitignore规则忽略指定文件

官方文档链接:gitignore

gitignore

指定不需要跟踪的文件进行忽略。

描述

一个gitignore文件指定git需要忽略的文件。 对git已经跟踪的文件不起作用。

在gitignore文件中的每一行均指定了一个模式,当决定一个文件路径是否需要忽略时,git会以以下顺序查看下列文件(优先级从高至低,在同一个优先级内,最后一个匹配的模式决定是否忽略文件)。 

1. 在命令行上指定的模式。 

2. 从相同目录中的.gitignore文件中读取的模式。或者上层目录中的模式(向上至目录树的顶点),但是在越低的目录级别中优先级越高(直到文件所在目录)。这些.gitignore文件对与其在相同目录中的文件有效。一个项目通常在一个仓库包含一个.gitignore文件,文件指定的模式包括项目的生成文件。 

3. 从.git/ingo/exclude文件中读取的模式 

4. 来自配置变量core.excludesFile指定的模式

将哪些文件放置到哪种模式中取决于取决于这个模式将被怎样使用: 

1. 不应该被版本管理,也不应该被通过clone分发到其他仓库中的文件写入.gitignore文件中(比如所有人都想忽略的文件) 

Patterns which should be version-controlled and distributed to other repositories via clone (i.e., files that all developers will want to ignore) should go into a .gitignore file.(这个貌似是官网写错了,应该是”should not be version-controlled”) 

2. 只对一个特定的仓库有效但是没有必要与其他仓库共享(比如,只对一个用户的流程有效的辅助文件)应该写入.git/ingo/exclude中。 

3. 一个用户希望Git在任何情况下都忽略的文件(比如备份或临时文件),应该添加到core.excludesFile中(用户的!/.giconfig),如果用户的$XDG_CONFIG_HOME没有被设置或者为空, $HOME/.config/git/ignore 将会生效。

模式格式

空格不匹配文件,所以可以使用空格分隔符来增加可读性

以#开始的行为注释,在前面添加一个\可以用来匹配一个以#开头的文件。

结尾空白会被忽略,除非使用\将空格分开

!将取消一个匹配,所有在之前忽略的模式中被忽略的文件文件将被重新包括到版本控制中。如果一个文件的父目录被忽略了,不可能将该文件再添加到版本控制中。因为性能的原因,git不会列出所有的被忽略的目录,针对这些目录中的文件的模式,无论在哪个文件中被指定都无效。 

在第一个!之前添加\将会匹配以!开头的文件,比如\!important!.txt

foo/将会匹配foo目录下的所有文件以及其子目录下的所有目录。通配符不会匹配pathnam/下的目录的的文件。比如Documentation/*.html 匹配 Documentation/git.html但是不匹配Documentation/ppc/ppc.html 和tools/perf/Documentation/perf.html.(*不能跨目录匹配)

以/开头匹配当前目录,比如,匹配/*.c匹配cat-file.c但是不匹配mozilla-sha1/sha1.c. 

以**/开头表示匹配所有目录,比如,**/foo匹配所有目录下的foo文件和foo目录,和foo效果相同。**/foo/bar匹配所有在foo目录下的bar文件和bar目录。

结尾的/**匹配所有目录内的文件。比如abc/**匹配所有abc目录下的文件。

a/**/b 匹配a/b, a/x/b, a/x/y/b and so on.

其他情况下的**无效

热门内容