Git игнорировать все файлы определенного типа, кроме тех, которые указаны в отдельной подпапке

У меня такая структура каталогов:

  • корень
    • folder1
      • abc.json
      • def.json
      • somedir
        • more.json
    • folder2
      • qwe.json
      • rty.json
    • спецификации
      • mock1.json
      • mock2.json
      • somedir
        • more_mocks.json

Теперь, используя .gitignore, я хочу игнорировать все файлы *.json, за исключением тех, что есть в spec. Я не хочу использовать .gitignore в folder1 и folder2, потому что их много, и они будут добавлены к большому количеству, и я уверен, что забуду переместить правильный .gitignore файл на месте.

Кроме того, в json файлах может быть больше вложенных каталогов, и это правило также должно применяться ко всем подкаталогам.

Итак, как игнорировать все файлы типа, за исключением определенного подкаталога?

Ответ 1

Дополнительный префикс !, который отменяет шаблон; любой сопоставимый файл, исключенный предыдущий шаблон станет снова включен. Если отрицательный шаблон совпадений, это переопределит нижние источники шаблонов приоритетов.

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json

Ответ 2

Или для какой-то вложенной папки

*.json
!**/metadata/*.json