之前使用git基本只是把它当作提交到 GitHub 上的工具,最多使用到的功能就是恢复误删的文件而已。

在我之前的git命令使用之中,基本上用的就是git clonegit add .git commit -m以及git commit push。由于基本上是无脑add,因此.gitigore的文件书写比较重要。

最近想复习并实践一下git的操作,在翻看git的文档时,发现.gitigore文件并没有我想象的那么简单。

可以先设想几个情景:

  • 每个子目录里面的tmp文件夹都不加入到git的版本控制中
  • 只有根目录下的tmp文件夹不加入
  • 所有的tmp文件夹,除了a/b/tmp
  • 忽略a目录下所有的pdf文件
  • 忽略a目录下及其子目录下所有的pdf文件
  • 忽略指定文件之外的文件

在解决这些问题之前,我先了解了一下gitignore的语法设计。它被称为 glob 模式,也就是shell中使用到的简化了的正则表达式,因此掌握它是没有什么难度的。

# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 tmp 文件夹,而不忽略子目录中的 tmp
/tmp/
# 忽略任何目录下名为 tmp 的文件夹
tmp/
# 忽略 doc 目录下的 pdf 文件,但不忽略 doc 子目录中的 pdf 文件
doc/*.pdf
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf