Gitignore исключает определенные файлы во всех подкаталогах
У меня есть каталог с именем /static. В нем много подкаталогов. Мне нужно игнорировать все файлы во всех подкаталогах каталога /static/, кроме файлов.htaccess, null.jpg и index.php. Скажите пожалуйста, каков правильный синтаксис для этой операции?
/static/**
!/static/**/.htaccess
а также
/static/*
!/static/*/.htaccess
не работает
1 ответ
Как я упоминал в " Включении определенного расширения файла в gitignore ", главное правило, которое нужно запомнить:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. (
*
)
(*
: если в git 2.?+ не выполнены определенные условия, см. ниже)
Вот почему любое правило, которое игнорирует папки (например, *
или же */
) сделает исключение любых вложенных файлов невозможным.
Вот почему правильный подход состоит в том, чтобы исключить все, кроме:
- папки,
- (затем) файлы, которые вы хотите исключить.
Если вы сначала не исключите папки, ваши файлы все равно будут игнорироваться (из-за правила, которое я упомянул выше)
Так что добавьте в свой .gitignore
:
/static/**/**
!/static/**/
!.gitignore
!.htaccess
Это протестировано с Git 2.4.1 и работает даже на Windows.
Обратите внимание, что в git 2.9.x/2.10 (середина 2016 года?) Может оказаться возможным повторно включить файл, если родительский каталог этого файла будет исключен, если в пути не будет подстановочного знака.
Nguy Thn Thái Ngọc Duy ( pclouds
) пытается добавить эту функцию:
- commit 506d8f1 для git v2.7.0, возвращен в commit 76b620d git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0,... отменён (!) в коммите 5cee3493 git 2.8.0-rc4.
Однако, поскольку одним из условий было "Часть каталога в правилах повторного включения должна быть буквальной (то есть без подстановочных знаков)", вы не можете использовать эту функцию здесь в любом случае.