.gitignore 文件解疑

.gitignore 模式匹配

.gitignore 用来让 git 在跟踪时忽略特定的文件,每一行是一个模式,#注释。

1
*.[ao]

一些点

  1. !反匹配
  2. 反匹配用于忽略目录中的 except 情况,参见git 官方文档

    1
    2
    3
    4
    /*
    !/foo
    /foo/*
    !/foo/bar

    然而在排除了整个目录中,不能再次包含其中的某个/些文件了!见git 官方文档

    It is not possible to re-include a file if a parent directory of that file is excluded.

    所以下面这样的话,

    1
    2
    foo/
    !foo/bar

    foo/bar 不会包含,会被忽略。

  3. 采用 glob
  4. /匹配 .gitignore 所在目录
  5. 层级 .gitignore ,子目录中的模式覆盖父目录中的
  6. git 会忽略过滤(根据 .gitignore)后的全空目录

我认为的和实际上的不同

*.a的作用

*.a会匹配 当前目录 以及 所有子孙目录 中的文件,我本来以为只会匹配当前目录下的后缀为 a的文件。

.gitkeep 文件的作用

就是用于包含空目录的!原理在于实际上将 .gitkeep 文件加入仓库,该目录就不是全空了!所以换成任何文件都行,比如 .empty ,.gitkepp 只是惯用名称,参见这里