1、为什么要有 .gitignore
文件?
项目中经常会生成一些Git系统不需要追踪( track )的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪( track )这些文件,可以 平时不用
git add
去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现项目中到处有未追踪( untracked )的文件; 这样也使git add .
和git commit -a
变得实际上没有用处,同时git status
命令的输出也会有它们。你可以在你的顶层工作目录中添加一个叫.gitignore
的文件,来告诉Git系统要忽略 掉哪些文件。
2、忽略文件原则:
- 忽略操作系统自动生成的文件,比如缩略图、
.DS_Store
等; - 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的
.class
文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件;
- 或者是我们就是不想某个文件
push
上去,这个时候我们只需要在.gitignore
中写入一些适当的规则, 就可以实现上面的效果。
3、 .gitignore
语法规范:
- 空行或是以#开头的行即注释行将被忽略;
- 以斜杠 “/” 结尾表示目录;
- 以星号 “*” 通配多个字符;
- 以问号 “?” 通配单个字符;
- 以方括号 “[]” 包含单个字符的匹配列表;
- 以叹号 “!” 表示不忽略(跟踪)匹配到的文件或目录;
- 可以在前面添加斜杠 “/” 来避免递归,下面的例子中可以很明白的看出来与下一条的区别。
4、示例:
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 尽管已经在前面忽略了 .a 文件
!lib.a
# 仅在当前目录下忽略 TODO 文件, 但不包括子目录下的 subdir/TODO
/TODO
# 忽略 build/ 文件夹下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
5、 .gitignore
文件配置模板:
GitHub 上为开发者提供了各种环境以及各种编程语言的 gitignore 文件配置模板。
Objective-C.gitignore
Swift.gitignore
小结:
- 忽略某些文件时,需要编写
.gitignore
。 -
.gitignore
文件本身要放到版本库里,并且可以对.gitignore
做版本管理! - 从版本库中删除:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"