Gitignore все, кроме одной папки и всего ее содержимого - независимо от уровня вложенности

Я знаю, что этот вопрос задавался много раз, но, честно говоря, несмотря на многие принятые ответы, я не нашел изящного решения этой проблемы. Я подчеркиваю работу аккуратно здесь.

Я хочу игнорировать все, кроме одной папки и всего ее содержимого.

Это не достигнет этого:

*
!dest
!dest/*

что бы сохранить dest папка и все файлы, которые находятся в dest, но не другие папки внутри, а также файлы в этих подпапках.

Кто-нибудь написал в комментариях! на один из подобных вопросов, которые вы не можете достичь без указания полного пути к тому, что вы не хотите игнорировать, если вы начинаете .gitignore с *,

Теперь я убежден, что он был прав. Или есть аккуратный способ игнорировать все, кроме одной папки и всего ее содержимого

1 ответ

Решение

Я только что проверил (с недавним Git, даже на Windows)

*
!dest/
!dest/**

Как обычно, вы просто должны следовать правилу:

Невозможно повторно включить файл, если родительский каталог этого файла исключен. ( * )
(*: если в git 2.?+ не выполнены определенные условия, см. ниже)

Однажды dest папка в белом списке (!dest/), вы можете легко исключить его содержание (на нескольких уровнях) (!dest/**).

Оттуда любой git check-ignore -v dest/x/y/z/aFile не вернул бы ничего, что означает aFile быть добавленным

Я упомянул похожий принцип (немного другое решение) в " Gitignore исключить определенные файлы во всех подкаталогах ".


Обратите внимание, что в git 2.9.x/2.10 (середина 2016 года?) Может оказаться возможным повторно включить файл, если родительский каталог этого файла будет исключен, если в пути не будет подстановочного знака.

Nguy Thn Thái Ngọc Duy ( pclouds ) пытается добавить эту функцию:

Здесь это должно работать с git 2.9+:

*
!dest
Другие вопросы по тегам