#Как выглядит неисправность
Git не добавляет файл через git add, хотя он виден в папке: обычно сработало правило .gitignore, .git/info/exclude или глобальный файл игнорирования. Игнорирование не удаляет уже отслеживаемые файлы.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Файл совпал с правилом .gitignoreЗадан шаблон *.log, build/ или точный путь | git check-ignore -v указывает правило и строку | Исправить точное правило либо добавить исключение |
| Глобальное правило игнорированияВ проекте подходящего правила нет | check-ignore указывает путь вне репозитория | Проверить core.excludesFile и локальные исключения |
#Пошаговое устранение
- 1. Откройте правильную рабочую папкуВ терминале выполните git rev-parse --show-toplevel и git status --short. Сравните показанный каталог с тем, где лежит файл. Если Git пишет not a git repository — сначала перейдите в каталог проекта.
- Обе команды только читают состояниеLinux · Терминал (Bash)КомандаОбе команды только читают состояние.
git rev-parse --show-toplevelgit status --short
- 2. Выясните конкретное правилоПодставьте путь к файлу относительно корня проекта и запустите git check-ignore -v -- path/to/file. Результат показывает имя файла с правилами, номер строки и шаблон. Если вывода нет, вероятно, файл не игнорируется; проверьте регистр имени и путь.
- Замените path/to/file; только диагностикаLinux · Терминал (Bash)КомандаЗамените path/to/file; только диагностика.
git check-ignore -v -- path/to/file
- 3. Проверьте, отслеживается ли файлЗапустите git ls-files --error-unmatch -- path/to/file. Если указан путь, файл уже под контролем Git — правило игнорирования для него не действует. Если команда сообщает ошибку, файл пока не отслеживается.
- Только чтение, возможен код завершения 1 для неотслеживаемого файлаLinux · Терминал (Bash)КомандаТолько чтение, возможен код завершения 1 для неотслеживаемого файла.
git ls-files --error-unmatch -- path/to/file
- 4. Измените только нужное правилоОткройте .gitignore, указанный check-ignore, и уточните исключение, например !config/example.env для безопасного примера вместо общего !*.env. Если игнорируется родительская папка, сперва разрешите путь к ней. Сохраните файл в UTF-8, затем снова выполните check-ignore.
- 5. При необходимости добавьте один безопасный файл принудительноТолько убедившись, что в файле нет ключей, выполните git add -f -- path/to/file. Флаг -f обходит игнорирование; он не делает содержимое безопасным. Предпочтительнее точное исключение в .gitignore.
- Изменяет индекс; второй вывод позволяет проверить, что подготовлен нужный файлLinux · Терминал (Bash)С осторожностьюИзменяет индекс; второй вывод позволяет проверить, что подготовлен нужный файл.
git add -f -- path/to/filegit diff --cached --statКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- Проверка; осторожно с выводом содержимого секретовLinux · Терминал (Bash)КомандаПроверка; осторожно с выводом содержимого секретов.
git diff --cached --name-onlygit diff --cached - 6. Проверьте результат перед коммитомВыполните git diff --cached --name-only, сравните список с ожидаемым и просмотрите изменения через git diff --cached. Если появился закрытый файл, выполните git restore --staged -- path/to/file и верните правило игнорирования.
#Как проверить результат
В списке подготовленных файлов должен быть только нужный безопасный файл. Если он по-прежнему не появляется, проверьте .git/info/exclude и глобальный core.excludesFile; убедитесь, что файл существует по указанному пути.
#Если проблема осталась
Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.