> For the complete documentation index, see [llms.txt](https://raozhanping.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://raozhanping.gitbook.io/notes/tool-dev/tool-git/tool-git-gitignore.md).

# gitignore

可以指定git提交忽略的文件路径

### Pattern Format

* 空行不匹配任何文件，因此可以使用空行作为分隔符来提高可读性
* `#` 用在开头的表明该行是注释，用 hash 开头的行需要使用 `\` 转义
* 尾随空格会被忽略，除非使用引号包裹 + `\` 转义
* `!` 感叹号用来否定当前模式，即不忽略匹配到的文件
* `\` 用作文件夹分隔符，他可以出现在模式中的开头、中间和结尾。
  * 如果模式结尾存在`\` ，匹配的是文件夹
  * 如果模式结尾不存在`\`，则匹配的是文件夹和文件
* `*` 星号可用于匹配任何东西不包括斜杠 `\`&#x20;
* `?` 问号可用于匹配任何一个字符不包括斜杠 `\`&#x20;
* `[a-zA-Z]` 范围符号可用于匹配范围内一个字符（有关更多详情说明请参考 fnmatch(3) 和 FNM\_PATHNAME）
* `**` 在不同的使用场景中具有不同的意义&#x20;
  * 前导 `**` 后跟随 \\,表示在目录中匹配。例如："\*\*/foo" === "foo"
  * 尾随 `**` 前是 `\`,表示匹配目录下所有内容。例如： "abc/\*\*" 表示匹配abc 目录下的所有内容
  * `\`  后跟随 `**` 并且后续 \ 匹配一个或多个目录。例如："a/\*\*/b" === "a/x/b" || "a/x/y/b" 等等
  * 其他连续的星号被视为常规星号，并将根据之前的规则进行匹配

### Reference

* [Git Doc](https://git-scm.com/docs/gitignore)
