gitignore 忽略目录下文件仅保留目录形态

现有目录结构如下

├── public                     
    │── x1
    │   │── file1
    │   └── file2
    │── x2
    │   │── file3
    │   └── file4
    └── thumb
        │── file5
        └── file6

想要忽略 x1,x2 目录及全部文件,忽略 thumb 目录下的文件保留 thumb 目录结构。

创建 public/.gitignore 文件,语义为“忽略 当前目录下的全部文件和目录,但不忽略 thumb 目录”。

# public/.gitignore
# 忽略
*

# 不忽略
!.gitignore
!thumb/

但是,这样不能满足我们的要求,虽然忽略了 x1-xn 的目录及其下文件,保留了 thumb 目录,但 thumb 目录下的文件也被保留下来,我们要的是只保留 thumb 目录结构。

再创建 public/thumb/.gitignore 文件,进行处理。语义为“忽略当前目录的所有文件,但不忽略 .gitignore 文件”。

# public/thumb/.gitignore

*
!.gitignore

可以看到 public/.gitignore 文件和 public/thumb/.gitignore 文件对于 thumb 目录的忽略规则是由冲突的。因为当前目录的规则优先级高于父级目录定义的规则,所以提交 git 后,thumb 目录下仅存在 .gitignore 文件,thumb 目录将得以保留。

若没有!.gitignore这条规则,thumb 目录下的所有内容,将全部被忽略,目录下没有内容,提交 git 后,目录不会被提交。