У меня есть файл .gitignore следующего содержания:
*
!/.gitignore
!CMakeLists.txt
!*.cpp
!*.hpp
Согласно задумке он должен разрешать добавление:
самого .gitignore в корне репозитория,
файлов CMakeLists.txt в любых папках и подпапках,
файлов формата .cpp и .hpp в любых папках и подпапках,
а всё остальное запрещать.
Однако разрешающие правила действуют только на файлы, расположенные в корне репозитория. И это, в принципе, логично
ФОРМАТ ПРАВИЛ
Необязательный префикс «!», инвертирующий действие правила; любой подпадающий по него файл, исключённый правилами выше, будет включён обратно. Невозможно включить файл, если он находится в уже исключённой папке. Git не просматривает содержимое исключённых папок в целях оптимизации, а потому правила не распространяются на их содержимое.
PATTERN FORMAT
An optional prefix “!” which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.
То есть первое правило, исключающее все подпапки, практически аннулирует действие разрешающих правил ниже.
Вопрос: как надо правильно включать только файлы с определёнными расширениями вне зависимости от их расположения и уровня вложенности?
Ответ
Можно сделать так:
*
!*/
!.gitignore
!.gitattributes
!.gitmodules
!CMakeLists.txt
!*.cpp
!*.hpp
Добавил ещё пару часто встречающихся файлов конфигурации git.
Комментариев нет:
Отправить комментарий