Урок 1. Что такое Git и зачем он нужен
Знакомая картина: папка с файлами курсовая.docx, курсовая_новая.docx, курсовая_финал.docx, курсовая_финал_2_точно.docx. Какая версия последняя, что в ней поменялось и как вернуть удачный абзац из позапрошлой — уже не понять. С программами ещё хуже: исправили одну ошибку, появились две новые, а как было до правки — никто не помнит.
Система контроля версий решает эту задачу: она сама хранит все версии файлов проекта, помнит, кто, когда и зачем их менял, и в любой момент может показать разницу или вернуть прошлое состояние. Самая распространённая такая система — Git.
Что умеет Git
- Хранит историю. Каждое сохранённое в Git состояние проекта остаётся в истории, к нему можно вернуться.
- Показывает разницу. Видно, какие строки добавлены и удалены между любыми двумя версиями.
- Ведёт ветки. Можно пробовать новую идею отдельно, не ломая рабочую версию, и потом объединить.
- Объединяет работу нескольких людей. Каждый правит свою копию, Git собирает правки вместе и подсказывает, где они столкнулись.
- Работает без интернета. Вся история лежит у вас на диске, сеть нужна только для обмена с другими.
Основные слова
Репозиторий (repository, «репа» на жаргоне) — папка проекта, история которой ведётся в Git. Сама история лежит в скрытой подпапке .git внутри неё. Удалите .git — останутся обычные файлы без истории.
Коммит (commit) — сохранённый снимок проекта: состояние файлов, имя автора, дата и короткое сообщение о том, что сделано, например «Исправлен расчёт скидки». У каждого коммита есть номер — хеш, строка вида 3e677f89be64b50549cba314384e0f14e6770322. Обычно хватает первых семи знаков: 3e677f8.
Ветка (branch) — линия развития проекта, цепочка коммитов. Основная ветка обычно называется main (во многих репозиториях — master). Для новой задачи заводят отдельную ветку, а когда работа готова, сливают её с основной.
Удалённый репозиторий (remote) — копия проекта на другом компьютере или сервере, например на GitHub. С ним обмениваются коммитами: отправляют свои и забирают чужие.
Три места, где живут изменения
Новичка в Git сначала удивляет, что коммит делается в два шага. Изменения проходят три места:
| Место | Что там | Как туда попасть |
|---|---|---|
| Рабочая папка | Файлы, которые вы правите в редакторе | Просто изменить файл |
| Индекс (staging area) | Изменения, отобранные для следующего коммита | git add |
| Репозиторий | История коммитов в папке .git | git commit |
Индекс похож на коробку перед отправкой посылки: в неё кладут только то, что относится к делу. Например, вы исправили ошибку в одном файле и заодно начали новую функцию в другом — в коммит «Исправлена ошибка» попадёт только первый файл, а второй подождёт.
Git и GitHub — не одно и то же
Git — программа, которая стоит на вашем компьютере и ведёт историю. GitHub, GitLab, Bitbucket, Gitea — сервисы и программы для хранения репозиториев на сервере. Они добавляют к Git веб-страницы проекта, обсуждение правок (pull request), задачи и права доступа. Git можно использовать вовсе без них, а репозиторий с GitHub переносится на GitLab или свой сервер вместе со всей историей.
Что хранить в Git, а что нет
Git создан для текстовых файлов: код, настройки, документация, разметка сайтов. Для них он показывает разницу построчно и умеет объединять правки.
Большие двоичные файлы — видео, образы дисков, архивы, файлы фотошопа — Git тоже сохранит, но разницу показать не сможет, а каждая версия навсегда увеличит размер репозитория. Не кладут в Git и то, что собирается из исходников (папки сборки, node_modules), и секреты — пароли, ключи, токены. Как их исключить — в уроке Файл .gitignore.
Git — не резервная копия сам по себе. История лежит в той же папке, что и файлы: сломается диск — пропадёт и она. Копией репозиторий становится, когда он отправлен на другой компьютер или сервер.
Коротко
- Git хранит историю файлов проекта: что, когда и кем изменено, и умеет вернуть любую версию.
- Репозиторий — папка проекта со скрытой подпапкой
.git, в которой лежит история. - Коммит — снимок проекта с автором, датой и сообщением; у него есть номер-хеш.
- Изменения проходят путь: рабочая папка → индекс (
git add) → репозиторий (git commit). - Git — программа, GitHub и GitLab — сервисы для хранения репозиториев на сервере.