урок 1 из 10

Зачем контроль версий

Понимать, что даёт система контроля версий, как Git хранит историю снимками-коммитами, чем Git отличается от сервисов для репозиториев и на каких трёх правилах держится курс.

8 мин чтения · 4 главы ·5 заданий ·домашняя работа

Папка «финал_2_точно»

Почти каждый, кто писал код или длинный документ, видел такую папку: «проект», «проект_новый», «проект_финал», «проект_финал_2_точно». Через неделю никто не помнит, чем они отличаются, какая из них рабочая и что было сломано в той, которую удалили.

Система контроля версий решает ровно эту задачу — только аккуратно и автоматически. Она даёт четыре вещи:

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

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

В этом курсе мы разберём Git так, чтобы его команды перестали быть заклинаниями. Команд немного, и за каждой стоит простая идея. Когда идея понятна, команду легко вспомнить, а главное — легко понять, что пошло не так.

Коммит — снимок проекта

Как Git хранит историю? Главное слово — коммит. Коммит — это снимок всего проекта в момент, когда вы решили его сохранить. Не список изменённых строк, а именно снимок: как выглядели все файлы.

К каждому снимку Git прикладывает:

  • автора и дату;
  • сообщение — что и зачем изменено, его пишете вы;
  • ссылку на предыдущий коммит — так снимки выстраиваются в цепочку;
  • идентификатор — длинную строку из цифр и букв вроде 3f9a1c2…, по которой коммит можно найти. Обычно хватает первых семи знаков.
mainABCDHEAD
Каждый коммит — снимок всего проекта в момент сохранения, с автором, датой и сообщением. Коммиты связаны: каждый помнит предыдущий. HEAD показывает, где вы сейчас.

Цепочка коммитов и есть история проекта. Её можно посмотреть одной командой:

git log --oneline
d41e7b0 Добавить форму обратной связи
c92f3a1 Исправить опечатку в заголовке
b5e0d44 Сверстать страницу «О нас»
a17c9e2 Начальная версия сайта

Сверху — последний коммит. Отметка HEAD на схеме означает «где вы сейчас»: обычно это последний коммит текущей ветки. О ветках поговорим в пятом уроке.

Git и сервисы

Важно различать Git и сервисы для репозиториев. Их часто путают, и от этого непонятно, где что лежит.

Git — программа на вашем компьютере. Папка проекта, в которой Git ведёт историю, называется репозиторий. Вся история хранится прямо в ней, в скрытой служебной папке .git. Интернет для работы не нужен: коммиты, история, откат — всё локально.

Сервисы для репозиториев — например, GitHub или GitLab — хранят копию репозитория на сервере. Через неё участники обмениваются коммитами, там же обсуждают изменения и делают ревью. Но сам Git — у каждого свой.

Вашкомпьютер:вся историяСервисдлярепозиториевКомпьютерколлеги:вся история
У каждого участника на компьютере полная копия репозитория со всей историей. Сервис для репозиториев хранит общую копию, через которую обмениваются коммитами.

Такое устройство называют распределённым: у каждого участника полная копия истории, а не только последняя версия. Если сервис недоступен, работа не останавливается — коммитить можно и так, а обменяться изменениями — позже.

Как понять, что вы внутри репозитория? Команда git status расскажет, в какой ветке вы находитесь и что изменилось. Если папка не репозиторий, Git так и скажет. Это первая команда, которую стоит набирать по привычке — к ней мы вернёмся в следующем уроке.

Три правила курса

Весь курс держится на трёх правилах. Они короткие, и почти каждая беда с Git — нарушение одного из них.

Первое: коммит — одно законченное изменение с понятным сообщением. Не «сохранил всё за день», а «исправил расчёт скидки». Такой коммит легко понять, легко проверить и легко откатить, не задев остального. Этому посвящён третий урок.

Второе: общую историю не переписывают. Git позволяет менять прошлое: переписать коммит, выбросить его, переставить. В своих, ещё не отправленных коммитах — можно. В тех, что уже ушли в общий репозиторий, — нельзя: у коллег эти коммиты уже есть, и переписанная история сломает им работу. Для отката общего есть безопасный способ — о нём в четвёртом уроке.

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

Дальше курс идёт по порядку работы: как делать коммиты, как смотреть и откатывать историю, как работать в ветках, как обмениваться изменениями с командой и как проходить ревью.

Задания урока

Каждое проверяется сразу: ответ сверяется с эталоном, и на неверный вариант приходит разбор.

  1. Что даёт система контроля версий?легко
  2. Сопоставьте понятие и смысл.средне
  3. Расставьте коммиты из вывода git log --oneline от самого старого к новому: вывод идёт сверху вниз — «Добавить форму», «Исправить опечатку», «Сверстать страницу», «Начальная версия».средне
  4. Git и GitHub — одно и то же.средне
  5. Разложите: работает без интернета или нужен сервис.средне
Пройти урок с проверкой заданий Курс «Git и работа в команде» открыт и бесплатен, прогресс сохраняется.
Открыть курс