Когда вы начинаете вести проект в 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 на самом деле выполняет сразу три действия:
- перемещает или переименовывает файл в файловой системе;
- удаляет старую версию файла из индекса;
- добавляет новый файл в индекс.
То есть после 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).
Эти навыки помогут поддерживать чистоту и порядок в проекте, исключая случайное попадание временных или конфиденциальных данных в историю версий.