在使用 Git 进行版本控制的时候,有些文件是无需纳入 Git 管理的,通常都是些自动 生成的文件,像日志或者编译过程中创建的文件。我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件来解决这个问题。
gitignore文件内容生成:https://www.toptal.com/developers/gitignore
格式规范
- 所有空行或者以注释符号 # 开头的行都会被 Git 忽略
- 可以使用标准的 glob 模式匹配
- 匹配模式最后跟斜杠(/)说明要忽略的是目录
- 要忽略指定模式以外的文件或目录,可以在模式前加上感叹号(!)进行取反
glob模式
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式,匹配规则如下:
"*"
:星号匹配零个或多个任意字符[]
:匹配任何一个列在方括号中的字符,如[ab]匹配a或者匹配b"?"
:问号匹配一个任意字符[n-m]
:匹配所有在这两个字符范围内的字符,如[0-9]表示匹配所有0到9的数字
举例
- # 表示此为注释,将被Git忽略
- *.a 表示忽略所有 .a 结尾的文件
- !lib.a 表示lib.a除外
- /TODO 表示仅仅忽略项目根目录下的 TODO 文件,但不包括 subdir/TODO
- build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹
- doc/*.txt 表示会忽略 doc/notes.txt,但不包括 doc/server/arch.txt
- bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,但不忽略 bin 文件
- /bin: 表示忽略根目录下的bin文件
- /*.c: 表示忽略cat.c,但不忽略 build/cat.c
- debug/*.obj: 表示忽略debug/io.obj,但不忽略 debug/common/io.obj 和 tools/debug/io.obj
- **/foo: 表示忽略/foo,a/foo,a/b/foo等
- a/**/b: 表示忽略a/b,a/x/b,a/x/y/b等
- !/bin/run.sh 表示不忽略bin目录下的run.sh文件
- *.log: 表示忽略所有 .log 文件
- config.php: 表示忽略当前路径的 config.php 文件
- /mtk/ 表示过滤整个文件夹
- *.zip 表示过滤所有.zip文件
- /mtk/do.c 表示过滤某个具体文件