在每一次的开发中,一般总会有一些文件是我们不希望提交、也不希望出现在未跟踪的文件列表里的。这时,我们可以使用 .gitignore 文件,屏蔽或排除掉我们不想添加到git仓库中的文件,git已经跟踪的文件则不受影响。


实例了然

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 忽略所有的 .a 文件(星号*泛指)。
*.a

# 跟踪所有的 lib.a,即便在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略子目录下的(./subdir/TODO)
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略doc/当前目录下的所有.txt,但不忽略 doc/子目录下的.txt(如:doc/app/*.txt)
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

gitignore文件中的每一行都指定一个模式。在决定是否忽略路径时,Git通常会gitignore按照从高到低的优先顺序检查来自多个源的模式(从一个优先级,最后一个匹配模式决定结果)。

编写规范

文件 .gitignore 的格式规范如下:

  • 所有空行或者以 # 开头的行都会被 Git 忽略,即注释。

  • 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。

  • 匹配模式可以以(/)开头防止递归。

  • 匹配模式可以以(/)结尾指定目录。

  • 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。

  • 星号(*)匹配零个或多个任意字符;
  • [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
  • 问号(?)只匹配一个任意字符;
  • 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
  • 使用两个星号()表示匹配任意中间目录,比如 `a//z可以匹配a/za/b/za/b/c/z` 等。

常用gitignore模板

因为忽略文件有极大的共性,因此有时候不需要我们自己编写.gitignore 文件,而可以直接使用模板。

github有一个仓库专门收集了.gitignore模板,一方面是便利,可以直接使用;另一方面是接入行业共识或标准。仓库:gitignore


参考文献

评论

载入天数...载入时分秒...