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 ) пытается добавить эту функцию:

Однако, поскольку одним из условий было "Часть каталога в правилах повторного включения должна быть буквальной (то есть без подстановочных знаков)", вы не можете использовать эту функцию здесь в любом случае.

Другие вопросы по тегам