Commit 59856de из Karsten Blees (kblees) для Git 1.9 / 2.0 (первый квартал 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
--------------------------------------------------------------
В вашем случае:
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
Сначала вы должны занести в белый список папок , прежде чем сможете занести в белый список файлы в данной папке.
Обновление за февраль / март 2016 года:
Обратите внимание, что в git 2.9.x / 2.10 (середина 2016 года?) Может быть возможно повторно включить файл, если исключен родительский каталог этого файла , если в пути нет подстановочного знака включено .
Nguyễn Thái Ngọc Duy (pclouds
) пытается добавить эту функцию:
Так что с git 2.9+ это могло бы сработать, но в конечном итоге было отменено:
application/
!application/language/gr/