之前使用git
基本只是把它当作提交到 GitHub 上的工具,最多使用到的功能就是恢复误删的文件而已。
在我之前的git
命令使用之中,基本上用的就是git clone
、git 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