GIT: перестать отслеживать файл или папку

Иногда в процессе разработки возникает ситуация, когда файл или целая директория уже добавлены в репозиторий, но их больше не нужно отслеживать. Например:

  • вы по ошибке закоммитили файлы логов или временные данные;
  • в проекте появилась папка с кэшем;
  • какие-то данные должны оставаться только локально (например, настройки IDE).

В таких случаях важно убрать файл/папку из индекса GIT, но при этом оставить их на диске.

Убрать папку из отслеживания

Разбор команды:

  • git rm — удалить из индекса;
  • -r — рекурсивно по всем вложенным файлам и папкам;
  • --cached — удалять только из индекса, не трогая файлы в рабочей директории.

После этого папка my-folder останется на диске, но её содержимое больше не будет отслеживаться GIT.

Убрать все файлы внутри папки, но не саму папку

Иногда нужно оставить сам каталог в репозитории (например, uploads/ или storage/), но очистить его содержимое.

-- (две черты) — это специальный разделитель аргументов.

  • Он нужен, чтобы GIT понимал, что всё, что идёт после него, — это именно имена файлов/папок, а не опции команды.
  • Например, если у вас есть файл с именем --test.txt, без этого разделителя GIT подумает, что это флаг.
  • В нашем случае -- избыточен, но это рекомендованный приём безопасности, чтобы команды работали одинаково при любом имени пути.

Теперь папка будет пустой в репозитории, но сама директория сохранится.

Убрать отдельный файл из индекса

Точно также как и с папкой, только без флага -r (рекурсии).

Добавить в .gitignore

После того как вы перестали отслеживать файлы, обязательно добавьте их в .gitignore, чтобы они снова не попали в коммиты.

Итоговый порядок действий

  1. Удаляем ненужный файл/папку из индекса (git rm --cached).
  2. Делаем коммит с изменением.
  3. Добавляем путь в .gitignore, чтобы GIT больше не пытался отслеживать эти файлы.

Мало букафф? Читайте есчо !

Тонкости настройки в .gitignore

Июль 17, 2017 г.

Настройки в файле .gitignore позволяют исключить из списка файлов сканируемых GIT, все то что отслеживать не надо. Обычно это так называемые юзер-файлы, изображения, архивы, документация и т.п. В данной статье рассмотрим типовой случай настоек в .gitignore. ...

Читать

Git pull с передачей логина и пароля

Декабрь 11, 2021 г.

Репозиторий почти всегда требует реквизитов доступа. И, если вы их не храните в локальной конфигурации, то скрипты, содержащие git pull, будут прерываться, запрашивая пару логин/пароль. Передать реквизиты с отдельным ключом нельзя, но можно задать ...

Читать

Как сравнить два произвольных файла не включенных в репозиторий средствами git diff

Июль 1, 2022 г.

Утилита Git diff может сравнивать не только изменения между ветками, но и вообще произвольные объекты файловой системы, которые даже не включены в репозиторий. ...

Читать

Создание патча для модуля Drupal

Декабрь 4, 2017 г.

В Drupal для решения ваших задач вы подбираете contributed модули. Отлично, если модуль поддерживается автором, в нем нет багов и есть нужный вам функционал. В противном случае, вы, возможно, правите модуль и используете его для себя. Но, наверное, было ...

Читать
 

Комментарии к «GIT: перестать отслеживать файл или папку»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: