4. 忽略文件.gitignore
在项目开发过程中,有些文件是项目测试时自动生成的文件,这些文件没有必要加入到仓库中进行版本控制。如:日志文件等。在这种情况下,你可以在工作区根文件夹下创建一个名为 .gitignore 的文件,此文件的内容可以列出匹配模式的文件,与这些模式匹配的文件默认不会被纳入版本控制。即使用 git add * 等命令也会忽略这些匹配的文件。
如:.gitignore 文件的内容如下:
*.[oa]
*.obj
上述文件第一行告诉 Git 忽略任何以 .o 或 .a 结尾的文件。第二行告诉 Git 忽略所有文件名以 .obj 结尾的文件。
在创建一个新的 Git 仓库时,设置一个 .gitignore 文件通常是个好办法,这样你就不会意外提交你确实不想纳入 Git 仓库的文件。
你可以放入 .gitignore 文件的模式规则如下:
- 空行或以 # 开头的行会被忽略。这是
.gitignore文件的注释。 - 标准的 glob 模式有效,并且会在整个工作树中递归应用。
- 你可以以正斜杠(
/)开头模式以避免递归。 - 你可以以正斜杠(
/)结尾模式来指定一个文件夹。 - 你可以通过在模式前加上感叹号(
!)来取反该模式。
Glob 模式类似于 shell 使用的简化正则表达式。星号(*)匹配零个或多个字符;[abc] 匹配括号内的任何字符(本例中是 a、b 或 c);问号(?)匹配单个字符;用连字符分隔字符并用括号括起来([0-9])匹配它们之间的任何字符(本例中是 0 到 9)。你也可以使用两个星号来匹配嵌套文件夹;a/**/z 将匹配 a/z、a/b/z、a/b/c/z 等等。
以下是一个 .gitignore 文件的例子:
# 忽略所有 .a 文件
*.a
# 但是跟踪 lib.a,即使你上面忽略了 .a 文件
!lib.a
# 只忽略当前文件夹下的 TODO 文件,而不是 subdir/TODO
/TODO
# 忽略所有名为 build 的文件夹下的所有文件
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 文件夹及其任何子文件夹中的所有 .pdf 文件
doc/**/*.pdf
提示
GitHub 维护了一个相当全面的 .gitignore 文件示例列表,适用于数十个项目和语言,地址是:https://github.com/github/gitignore,如果你想为你的项目设置一个方便的提交方式,可以参照这个文件的写法。
注意
在通常情况下,仓库可能在根文件夹中有一个 .gitignore 文件,它递归地应用于整个仓库。然而,也可以在子文件夹中拥有额外的 .gitignore 文件。这些嵌套的 .gitignore 文件中的规则仅适用于它们所在文件夹下的文件。Linux 内核源代码仓库就有 206 个 .gitignore 文件。
深入探讨多个 .gitignore 文件的细节详情请参阅手册 man gitignore。