gitignore配置详解
如果你使用git来管惯栲狠疲理代码版本,你必须懂得如何使用.gitignore文件,该文件可以指定git忽略哪些文件,在git中的作用非常重要。在理解gitignore的配置之酡箔挝棍前,我们要先看看这些规则都可以来自哪里。通常git可以从多个地方获取忽略规则,优先级从上到下依次为:
`.gitignore`文件,`$GIT_DIR/info/exclude`文件和`core.excludesFile`配置文件中列明的文件。这三种写规则的方式有不同的用武之地。
规则的来源和优先级
.gitignore文件适合写于项目有关的规则,并且这些规则需要与合作者分享。
`$GIT_DIR/info/exclude`适用于与项目有关,但是你不想分享给其他作者,这些规则可能只适用于你自己。
`core.excludesFile`适用于你在任何情况下都需要忽略的规则。这种情况不常用。
规则的写法
空行不匹配任何文件,所以空行通常是规则分组的分隔符,只是在视觉上将不同的规则分组。
以`#`开始的行代表注释,所以也不匹配任何文件。
末尾的空格没有任何意义,如果你想匹配空格,你需要在空格前加转义字符``。
例如:`a `这种写法可以匹配`a `
感叹号`!`的作用是从已有的忽略规则里排除一部分文件。注意想要让感叹号起作用,必须在前规则中使用通配符`*`。例如:
前规则写成:`.env/*`
想要追踪`.env`文件夹下的`data.txt`,需要追加一个规则:`!.env/data.txt`
如果前规则写成`.env`,则`!.env/data.txt`不起作用。
如果规则以`/`结尾,则表示匹配文件夹, 类似的文件和链接都不会匹配。
如果规则中不包含`/`,则规则即可匹配文件夹也可以匹配文件和链接,类似于linux shell中的通配符,可以匹配任何可以与通配符匹配的路径。
通配符无法匹配符号`/`,所以类似这样的规则`foo/*.html`不能匹配`foo/bar/test.html`。
规则以`/`开头表示匹配`.gitignore`文件所在的目录。也就是说规则`/*.txt`只能匹配.gitignore所在目录下的所有txt文件,不能匹配其他目录下的txt文件。
特殊情况举例
以`**/`开头的规则表示匹配所有文件夹,规则`**/a/b`能匹配`foo/a/b`也能匹配`foo/bar/a/b`
以`/**`结尾的规则表示匹配目录下所有文件和文件夹,规则`a/b/**`能匹配`/a/b/c`也能匹配`a/b/c/d/e`
规则中间包含`/**/`表示匹配任意路径,比如规则`a/**/b`可以匹配`a/foo/bar/b`和`a/e/m/c/b`。