Почему не работает gitignore
Перейти к содержимому

Почему не работает gitignore

.gitignore не игнорирует — не работает — не применяется — как исправить. Решение

vedro-compota's picture

Файл .gitignore может не работать в случае, если клонированный вами репозиторий уже содержал правила для файлов и папок которые вы пытаетесь исключить (то есть они не были в .gitignore и не игнорировались — а вы резко захотели их игнорировать) — в этом случае внесение их в файл игнорирования само по не поможет — их нужно удалить из «контроля»

Что делать

-прейдите в папку с кодом (ваш локальный репозиторий) :

и удалите файл из контроля (например .htaccess):

Аналогично можно заставить игнорировать и сам .gitignore (если раньше не игнорировался):

Потом делаем Commit и ярлыки (если они есть — например в винде с использованием tortoisegit) покажут нам что удалённые из кэша файлы теперь игнорируются.

На основании документации по git:

.gitignore

If you create a file in your repository named .gitignore git will use its rules when looking at
files to commit. Note that git will not ignore a file that was already tracked before a rule was added to this file to ignore it. In such a case the file must be un-tracked, usually with
git rm —cached filename

Не игнорируются файлы в .gitignore

Читаю книгу Test-Driven Development with Python, во второй главе описывается создание git-репозитория. Я следую всем инструкциям, но мой файл .gitignore не игнорирует записанное в нём. В чём проблема?

pic

user avatar

user avatar

Подозреваю, что вы добавили файлы в индекс раньше, чем начали игнорировать. То есть до той git add . , который на скриншоте, была еще одна такая команда. Чтобы узнать точно, не хватает git status перед добавлением.

Если файл уже был добавлен, то изменение в .gitignore не вызывает удаления из текущего индекса (что логично и безопасно).

Если файлы только добавлены, но еще не включены в коммит

В данном конкретном случае именно так и есть. При этом достаточно удалить их из индекса. Данная команда возвращает индекс к HEAD, то есть состоянию последнего коммита.

Вы можете заметить, что сам Git предлагает использовать другую команду:

В данном случае эти команды эквивалентны. Такое дублирование появилось в результате эволюционного развития функционала Git. Это в том числе отражено в документации и в сообщениях Git: где-то рекомендуется reset , где-то rm —cached .

Если игнорируемые файлы уже есть в последнем коммите

Возможна и такая ситуация, на всякий случай я опишу и ее. Здесь reset не сработает, нужен rm . Аргумент —cached заставляет Git удалить файл из индекса, но не трогать рабочую область. То есть он буквально индексирует удаление файла, хотя этого удаления не было. Если сделать это с файлом, который не игнорируется, то после коммита он будет в категории неотслеживаемых (untracked).

Если нужно убрать целую игнорируемую папку, добавляем ключ -r:

Эта удобная команда применяет rm ко всем файлам, указанным в .gitignore :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *