Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Игнорировать все файлы кроме тех, что имеют определённые расширения

#git #gitignore


У меня есть файл .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.
  


То есть первое правило, исключающее все подпапки, практически аннулирует действие
разрешающих правил ниже.

Вопрос: как надо правильно включать только файлы с определёнными расширениями вне
зависимости от их расположения и уровня вложенности?
    


Ответы

Ответ 1



Можно сделать так: * !*/ !.gitignore !.gitattributes !.gitmodules !CMakeLists.txt !*.cpp !*.hpp Добавил ещё пару часто встречающихся файлов конфигурации git.

Ответ 2



Скорее всего необходимо задвать правило указывая ** директорию. Например !**/*.hpp !**/*.cpp

Комментариев нет:

Отправить комментарий