Я создал белый список только для текстовых файлов.
*
!*.txt
Теперь у меня есть неотслеживаемый текстовый файл в подкаталоге - sub/dir/file.txt
, и он НЕ отображается (игнорируется). Однако отображаются текстовые файлы в корневом каталоге.
Почему это так и как это исправить?
.gitignore
.Ответы:
Если вы попробуете таким образом, это не удастся, потому что вы в конечном итоге внесете в черный список каталоги в своей структуре.
Чтобы решить эту проблему, вы хотите занести в черный список все, что не является каталогом и не является одним из типов файлов, которые вы хотите зафиксировать, при этом не помещая в черный список каталоги. .
.gitignore
Файл , который будет делать это:Испытано это в структуре трехуровневой белого списка для
.txt
файлов в присутствии*.one
,*.two
и*.three
файлы , используя.gitignore
расположенные в корневом каталоге репозитория - работает для меня. Вам не нужно будет добавлять.gitignore
файлы во все каталоги в вашей структуре.Информация, которую я использовал для выяснения ответа, пришла, помимо прочего, с этого (stackoverflow.com).
источник
!.gitignore
при использовании*
, не так ли?/*
для внесения в черный список только папки верхнего уровня, но не всех папок рекурсивно, что на самом деле означает, что не.gitignore
следует заглядывать в подпапки папки из белого списка.Более простой способ добиться этого:
Это работает, потому что
gitignore
шаблоны, которые не начинаются, применяются/
ко всем уровням ниже.gitignore
файла:Если вы хотите сделать это с файлами внутри каталога , все становится сложнее:
Это работает, потому что
gitignore
есть специальные правила для**
:Ключевой момент - убедиться, что вы не игнорируете каталоги, потому что тогда каждый файл в этом каталоге игнорируется независимо от других правил.
источник
Долго искал:
Предположим, у меня есть большая структура папок с рекурсивно вложенными каталогами ~ 100 000. В этих папках около 30 000 файлов типа
.txt
(в моем случае: type*.md
). Рядом с этими*.md
файлами есть, скажем, 500 ГБ (более миллиона) файлов, которые я не хочу отслеживать.Я хочу, чтобы git отслеживал только
.txt
(или*.md
) файлы во всех папках и подкаталогах.Правильный ответ должен быть: в Git это невозможно.
Что я сделал вместо этого:
[edit: тоже не сработало - я пытался создать папку с символическими ссылками (или жесткими ссылками) и использовать там git, но git не следует символическим ссылкам и перезаписывает жесткие ссылки. Дох!]
источник