$ sudo teach IT

Когда вы начинаете вести проект в Git, быстро возникает вопрос: какие файлы действительно нужно хранить в истории версий, а какие лучше исключить? Кроме того, по мере работы над проектом файлы могут переименовываться или вовсе удаляться. Управление этим процессом — важная часть работы с Git.

Представьте себе, что вы ведёте рабочий дневник. В нём должны быть только ценные записи о вашей работе, а черновики и случайные заметки вы сознательно не включаете. Точно так же Git позволяет игнорировать ненужные файлы, чтобы репозиторий оставался аккуратным и содержал только важные данные.

В этом уроке мы познакомимся с файлом .gitignore, а также с командами git mv и git rm, которые помогают поддерживать порядок в проекте.

Что вы узнаете в рамках урока

  • как исключать ненужные файлы с помощью .gitignore;
  • как правильно переименовывать и перемещать файлы;
  • как удалять файлы из репозитория, сохраняя или убирая их из рабочей папки;
  • какие ошибки часто совершают новички при управлении файлами.

Ключевые термины

  • .gitignore — специальный файл, где перечисляются имена и шаблоны файлов, которые не должны попадать в историю версий.
  • git mv — команда для перемещения или переименования файлов внутри репозитория.
  • git rm — команда для удаления файлов из репозитория и (по желанию) из рабочей директории.
  • -cached — флаг, позволяющий исключить файл из отслеживания, но оставить его в рабочей папке.

Игнорирование файлов с помощью .gitignore

Когда мы начинаем вести проект в Git, хочется, чтобы история репозитория содержала только полезные изменения — код, документацию, важные конфигурации. Но в папке проекта часто появляются файлы, которые не нужны другим и не имеют смысла для истории версий. Это могут быть:

  • временные файлы редакторов (например, ~temp.txt или .DS_Store в macOS);
  • файлы журналов (.log), которые генерируются при работе программы;
  • кэшированные данные (node_modules/ в проектах на JavaScript или .venv/ в Python);
  • личные конфигурации (config.ini с паролями или ключами доступа).

Аналогия с дневником

Представьте, что вы ведёте дневник своей работы. В нём важные идеи, заметки и планы. Но рядом на столе у вас может быть куча черновиков, быстрых записок и стикеров. В сам дневник вы их не вклеиваете, потому что они захламят его и сделают бесполезным. Файл .gitignore выполняет эту роль для Git — он говорит системе: «эти записи временные, не включай их в мой основной журнал».

Как работает .gitignore

Файл .gitignore — это обычный текстовый файл в корне репозитория, где перечислены правила для исключения. Каждое правило — это либо конкретный файл, либо шаблон.

Примеры:

# Игнорировать все файлы с расширением .log
*.log

# Игнорировать конкретный файл
config.ini

# Игнорировать целую папку
temp/

  • .log — исключит все журналы ошибок;
  • config.ini — защитит конфиденциальный файл от попадания в историю;
  • temp/ — скроет всю папку с временными материалами.

Важный момент: уже отслеживаемые файлы

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

Чтобы исправить это, нужно убрать файл из индекса, но оставить его на компьютере:

git rm --cached config.ini

После этого файл перестанет отслеживаться и будет игнорироваться.

Продвинутые приёмы

Файл .gitignore поддерживает более гибкие правила:

# Игнорировать все .log файлы во всех подпапках
**/*.log

# Игнорировать всё содержимое папки, кроме одного файла
temp/*
!temp/keep.txt

Второй пример полезен, если в папке много мусора, но есть один важный файл, который всё-таки должен отслеживаться.

Перемещение и переименование файлов (git mv)

В процессе работы над проектом структура папок и имена файлов редко остаются неизменными. Иногда мы хотим упорядочить код, вынести часть файлов в отдельный каталог, а иногда просто даём файлам более понятные названия.

Можно, конечно, переименовать файл вручную через проводник или командой mv в Linux/rename в Windows. Но тогда Git воспримет это как удаление старого файла и создание нового. В результате история может потеряться, а изменения будут отображены не так аккуратно.

Чтобы этого избежать, в Git существует специальная команда:

git mv <старое_имя> <новое_имя>

Что делает git mv

Команда git mv на самом деле выполняет сразу три действия:

  1. перемещает или переименовывает файл в файловой системе;
  2. удаляет старую версию файла из индекса;
  3. добавляет новый файл в индекс.

То есть после git mv ваш следующий коммит сразу будет содержать правильную информацию: файл просто изменил имя или место, но история его изменений сохранена.

Примеры

  • Переименование файла:
git mv oldname.txt newname.txt

Теперь при коммите Git зафиксирует, что файл был переименован, а не удалён и создан заново.

  • Перемещение файла в другую папку:
git mv file.txt src/

Файл переместится в папку src, и это также будет отражено в истории.

Аналогия с библиотекой

Представьте себе библиотеку. Если вы берёте книгу с полки и переносите её в другой шкаф, это всё ещё та же книга — её содержание не меняется. Система учёта фиксирует, что книга просто сменила место хранения. Git работает аналогично: файл остаётся тем же, меняется только путь к нему.

Когда лучше использовать git mv

  • если вы хотите сохранить аккуратную историю изменений;
  • если в команде несколько разработчиков и важно, чтобы Git чётко понимал, что файл лишь переместили;
  • если вы работаете с большими проектами, где потеря истории может привести к путанице.

Удаление файлов (git rm)

При работе над проектом нередко возникает необходимость убрать файл: устаревший скрипт, ненужный документ или случайно добавленный в репозиторий конфигурационный файл. Конечно, можно просто удалить файл вручную через проводник или терминал. Но тогда Git увидит это как «файл исчез» и отобразит удаление в статусе. Чтобы корректно зафиксировать удаление в истории и сразу подготовить изменения к коммиту, используется команда git rm.

Полное удаление файла

Если файл больше не нужен и его нужно убрать и из репозитория, и из рабочей папки, используется простая команда:

git rm unwanted_file.txt

В этом случае файл исчезнет и с диска, и из индекса Git. При следующем коммите история сохранит факт его удаления.

Удаление только из репозитория (-cached)

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

  • локальные настройки (config.ini, .env с паролями и ключами);
  • временные файлы или данные, которые нужны только на вашем устройстве;
  • папки с кэшем или зависимостями (node_modules/, .venv/).

В таких случаях применяется команда:

git rm --cached file_to_be_ignored.txt

Файл останется на вашем диске, но Git перестанет за ним следить. Чтобы такие файлы снова не попадали в историю, их обычно добавляют в .gitignore.

Аналогия с личными заметками

Представьте, что вы ведёте общий рабочий журнал вместе с коллегами. В нём вы фиксируете только важные записи. Но у вас есть личные черновики, которые нужны только вам. Вы не выбрасываете их — они остаются у вас на столе, но в общий журнал их не заносите. Именно так работает git rm --cached: файл остаётся у вас, но из «общей истории» проекта исчезает.

Наиболее частые ошибки

  • Забывают обновить .gitignore при добавлении новых временных файлов, и в репозиторий попадает «мусор».
  • Используют ручное переименование файлов вместо git mv, из-за чего Git видит это как удаление и создание нового файла.
  • Случайно удаляют важные файлы без флага -cached, вместо того чтобы просто исключить их из отслеживания.

Наиболее частые вопросы

Как Git распознаёт, что файл был переименован? При использовании git mv Git фиксирует связь между старым и новым именем.

Можно ли использовать маски в .gitignore? Да, например *.log исключит все файлы с расширением .log.

Что будет, если удалить файл вручную через проводник? Git заметит это как удаление и отразит в git status. Чтобы правильно зафиксировать изменение, нужно использовать git rm.

Итоги

В этом уроке мы научились:

  • исключать ненужные файлы с помощью .gitignore;
  • правильно переименовывать и перемещать файлы (git mv);
  • удалять файлы из репозитория с сохранением или удалением их копий (git rm и git rm --cached).

Эти навыки помогут поддерживать чистоту и порядок в проекте, исключая случайное попадание временных или конфиденциальных данных в историю версий.

На следующий урок