GIT忽略文件

我们知道,一些缓存文件、编辑器产生的文件等其他的文件,我们是不希望纳入版本库的。但如果每次git add 文件名,一个个敲下去,这实在是个非常烦人的操作,容易让人奔溃。还是使用git add .爽!那我们有没有办法忽略一些我们不希望纳入版本库的文件呢?答案是有的,可以使用.gitignore,在该文件里设置想要忽略的那些文件。然后使用git add .这些文件也不会被提交了。

比如,我不想将swp文件纳入版本库,以及不需要runtime这个文件夹,那么就可以这样设置

$ vim .gitignore

# 忽略swp文件
*.swp
# 忽略runtime文件夹
/runtime/

下面来说说.gitignore使用规范

  • git会忽略以#开头以及空白的行
  • 可以使用glob正则,它会递归到每个目录(如果没有指定防止递归的话)
  • 可以以/开头,来防止递归
  • 可以以/结尾,来指明目录
  • 可以使用!来方向选择。

!常见的用法是,我们想忽略掉一个文件夹,但文件夹里index.html保留。那么

/data/
!/data/index.html

表示忽略/data文件夹但是跟踪/data/index.html文件。

下面讲讲什么是glob正则,其实它是一种简化版的正则。

它使用*来匹配0个或多个任意字符。比如

*.php 表示匹配以.php结尾的文件
tmp* 表示匹配以tmp开头的所有文件

使用?来匹配一个任意字符,如

周?伦

使用[]来匹配[]里的任意一个字符,如

[abc] 表示匹配abc其中任意一个

另外,多个字符是连续的话,可以使用-来代替,如

[0-9] 表示匹配任意数字

使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/za/b/za/b/c/z 等。

下面我们以一个例子来讲解忽略文件的用法,一般的,我们会忽略/vendor目录,配置文件,日志文件夹/log,缓存文件等。

# 忽略swp文件
*.swp
# 忽略/vendor文件夹
/vendor/
# 忽略配置文件
/app/config/config.php
# 忽略/log文件夹
/log/
# 忽略缓存文件夹
/runtime/

上面所说就是如何去忽略那些不想加入到版本库的文件,一般建议是开始阶段就配置好该文件,防止提交不需要的文件。