Commit 59856de из Karsten Blees (kblees) для Git 1.9 / 2.0 (Q1 2014) поясняет этот случай:
gitignore.txt
: уточнить рекурсивный характер исключенных каталогов Необязательный префикс «
!
», который отрицает шаблон; любой сопоставимый файл, исключенный предыдущим шаблоном, снова будет включен.Невозможно повторно включить файл, если родительский каталог этого файла исключен. (
*
) (*
: если определенные условия не выполняются в git 2.8+, см. ниже) Git не перечисляет исключенные каталоги по причинам производительности, поэтому любые шаблоны с содержащимися файлами не влияют, независимо от того, где они определены .Поместите обратную косую черту («
\
») перед первым «!
» для шаблонов, которые начинаются с литерала «!
», например, «\!important!.txt
».Пример, чтобы исключить все, кроме определенного каталога
foo/bar
(обратите внимание на/*
- без косой черты, подстановочный знак также исключит все внутриfoo/bar
):-------------------------------------------------------------- $ cat .gitignore # exclude everything except directory foo/bar /* !/foo /foo/* !/foo/bar --------------------------------------------------------------
Обновление февраль / март 2016:
Обратите внимание, что с git 2.9.x / 2.10 (в середине 2016?) возможно повторное включение файла, если родительский каталог этого файла исключается , если в пути не добавлено подстановочное значение .
Nguyễn Thái Ngọc Duy (
pclouds
) пытается добавьте эту функцию:
- совершить 506d8f1 для git v2.7.0, вернули в commit 76b620d git v2.8.0-rc0
- совершить 5e 57f9c git v2.8.0-rc0, ... reverted (!) В commit 5cee3493 git 2.8.0.
Итак, с git 2.9+ , это могло бы действительно работать, но в конечном итоге было отменено:
application/ !application/language/gr/