Чтобы сконфигурировать файл `.gitignore` таким образом, чтобы игнорировать все файлы в директориях с именем `keys`, за исключением файлов с расширением `.pub`, вы должны применить глобальную исключающую маску для всех элементов, кроме `.pub`, а затем явно разрешить `.pub` файлы.
Вот пример того, как можно настроить файл `.gitignore`:
```
# Сначала игнорируем все в директориях keys
keys/*
# Затем разрешаем отслеживать файлы .pub в директориях keys
!keys/*.pub
```
После добавления этих строк в `.gitignore`, git начнёт игнорировать все файлы в директориях `keys` за исключением файлов с расширением `.pub`.
Убедитесь, что вы добавили `!keys/*.pub` после правила `keys/*`, потому что git читает файл `.gitignore` последовательно, и исключающие правила (`!`) должны идти после соответствующих игнорирующих правил.
Если у вас уже есть отслеживаемые файлы в директориях `keys` и вы хотите, чтобы они соответствовали новым правилам `.gitignore`, возможно потребуется обновить индекс git, чтобы удалить их:
```sh
git rm -r --cached keys
git add -A
git commit -m "Clean up ignored files"
```
Это удалит все файлы в директориях `keys` из отслеживаемых, но позволит файлам с расширением `.pub` быть добавленными обратно после этого, когда вы выполните `git add -A`.