Как добавить исключение в файл .gitignore?

Как правильно настроить файл .gitignore для того, чтобы игнорировать все файлы в директориях "keys", кроме файлов с расширением .pub? Вариант правил "!keys/*.pub" и "keys/" не дает ожидаемого результата, так как игнорирует все файлы в директориях "keys".
  • 18 января 2024 г. 10:21
Ответы на вопрос 4
Чтобы сконфигурировать файл `.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`.
It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined. 

Можно только добавить разово .pub руками.
Используй -f ключ: 
git add -f states/project1/keys/pk1.pub

Если файл игнорируется, то git add не будет делать автодополнение (в моем случае есть плагин для git - он не работает). Но однажды добавив его - изменения будут отслеживаться
В каждую директорию keys добавить свой гитигнор следующего содержания 


Либо попробовать в корневом


Первый вариант стопроцентный. Второй - хз.
Похожие вопросы