Исключения в .gitignore

Как я могу добавить исключение в .gitignore, например "игнорировать все файлы .dll, НО myfile.dll"?


person pistacchio    schedule 10.03.2010    source источник


Ответы (5)


Используйте !, чтобы инвертировать шаблон:

*.dll
!myfile.dll
person Ben James    schedule 10.03.2010

Если вы хотите игнорировать всю папку, кроме некоторых конкретных файлов, напишите:

MyFolder/*
!MyFolder/CoolFile.txt

Это не сработает:

MyFolder/
!MyFolder/CoolFile.txt
person cubuspl42    schedule 22.12.2013
comment
Обратите внимание, что это также распространяется на подкаталоги. Например, это будет работать: MyFolder/sub/* !MyFolder/sub/file.txt Но не будет: MyFolder/* !MyFolder/sub/file.txt - person ben; 14.01.2015
comment
Причина - невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не перечисляет исключенные каталоги по соображениям производительности, поэтому любые шаблоны для содержащихся файлов не действуют, независимо от того, где они определены. [git-scm.com/docs/gitignore] - person Craig Hicks; 21.06.2017
comment
Поэтому по соображениям производительности мне приходится вручную вводить 21 другую подпапку с одинаковым именем, которая ранее игнорировалась одной строкой, чтобы я мог исключить один файл. ???? - person endolith; 21.07.2020

Вы также можете игнорировать папки, например

!src/main/resources/archetype-resources/**/*

вы также можете игнорировать вложенную папку с шаблонами, например

!**/src/test/resources/**/*

Для быстрого создания файла .gitignore попробуйте gitignore.io

person Anver Sadhat    schedule 29.02.2012

У вас может быть несколько .gitignore файлов, работающих вместе в иерархическом порядке для достижения вашей цели. На корневом уровне у вас могут быть:

корень

*.dll

внутри папки с myfile.dll вы можете добавить еще один .gitignore файл следующим образом:

корень / lib / folderwithMyFiledll

!myfile.dll

дополнительная информация здесь

Необязательный префикс "!" который сводит на нет узор; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Поставьте обратную косую черту ("\") перед первым "!" для шаблонов, начинающихся с буквального символа "!", например "! important! .txt". Можно повторно включить файл, если родительский каталог этого файла исключен при соблюдении определенных условий. См. Подробности в разделе «ПРИМЕЧАНИЯ».

person kamayd    schedule 18.01.2016
comment
Вставленный фрагмент документа кажется устаревшим. На сайте в настоящее время указано, что вы не можете повторно включать файлы в родительские каталоги. - person vivainio; 04.01.2019

Я сделал это, потому что у меня есть папка с именем /modules, которую я хочу игнорировать, кроме всего, что находится в папке /modules/custom. Это сработало для меня. Теперь мои пользовательские модули будут синхронизироваться с GitHub.

/modules/*
!/modules/custom/
person Robbiegod    schedule 09.09.2019
comment
Это единственный метод, который у меня действительно сработал. - person Pete Alvin; 01.02.2020
comment
OMG, спасибо, именно то, что я пытался сделать, и удивительно, сколько мусорных ответов мне пришлось просеять, чтобы найти это. - person Peter Moore; 17.04.2021