.gitignore 中的感叹号不起作用

exclamation mark in .gitignore doesn't work

我有这个文件结构

aaafolder
└─ bbbfolder
   ├─ filename0.txt
   ├─ dddfolder
   │  ├─ filename1.txt
   │  └─ filename2.txt
   ├─ cccfolder
   └─ filename.txt

我想隐藏 aaafolder 文件夹中的所有内容,但 dddfolder 文件夹中的所有文件必须存在。

所以在存储库中我想进入 Git 这个:

aaafolder
└─ bbbfolder
   └─ dddfolder
      ├─ filename1.txt
      └─ filename2.txt

我的 .gitignore 看起来像这样:

/source/aaafolder/**
!/source/aaafolder/bbbfolder/dddfolder/*

但是,整个 aaafolder 文件夹将被忽略

像这样尝试:

aaafolder/*
!aaafolder/bbbfolder/*

您还需要分别取消忽略每个子目录 — bbbfolder/bbbfolder/dddfolder/

/source/aaafolder/
!/source/aaafolder/bbbfolder/
!/source/aaafolder/bbbfolder/dddfolder/
!/source/aaafolder/bbbfolder/dddfolder/*

Per the gitignore documentation,取反时:

it is not possible to re-include a file if a parent directory of that file is excluded.

这意味着您需要确保包含 dddfolderparent即使内容不包括 dddfolder 个。

换句话说,你不能用**贪心匹配。您需要使用单级通配符。您需要排除通向 dddfolder 的文件夹,然后包括它们的内容。

aaafolder/*
!aaafolder/bbbfolder
aaafolder/bbbfolder/*
!aaafolder/bbbfolder/dddfolder