GitHub на примере одной статьи
Гипотетическая статья в медиа для тех, кто хочет разобраться
Программисты вечно говорят загадками: то им надо что-то закоммитить, то запушить, то посмотреть, как оно там на гитхабе. Или на гите? А гит и гитхаб — это вообще одно и то же?

Давайте разбираться. Хорошая новость: понять это можно вообще без кода, правда, с небольшим количеством магии.

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

У вас на столе лежит пустая папка для бумаг — назовём её репозиторий. Вы написали на ней «Об отдыхе» и положили внутрь блокнот.

Вдруг как в сказке папка начала мигать красным светом и орать: «Опиши изменения! Опиши изменения, негодяй!!!»

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

Вы снова пожали плечами и пошли наградить себя кофе: вы сделали первый коммит.
Почему блокнот раздвоился
У вас на руках всегда есть блокнот — тот, в котором вы прямо сейчас черкаете. А в папке лежат «снимки» этого блокнота: каким он был утром, каким после обеда, каким в пятницу.

Блокнот в руках — рабочая копия. Блокнот в папке — версия. Они не мешают друг другу: пока вы не положили блокнот в папку, для папки ничего не произошло. Можете хоть весь текст стереть — папка даже не моргнёт.
Дача, Олег и другие коммиты
Через час вы вспомнили: дача! Какая же статья об отдыхе без дачи! Вы открыли блокнот и быстро вписали часть про дачу. Снова взяли ту же папку, ещё раз положили туда блокнот и записали на обратной стороне «Добавлена дача». Ваша копия блокнота снова осталась у вас в руках, но вас это перестало удивлять.

Потом вы подумали и переименовали Ибрагима в Олега — и снова положили блокнот в папку и написали «Ибрагим стал Олегом».
Тут приходит редактор
Редактор пришёл спросить за статью, а папка-то у вас на столе. Чтобы он увидел вашу работу, надо отнести её на общую полку в коридоре.

Полка — это GitHub. Одна из самых популярных полок на планете, но не единственная: есть ещё GitLab, Bitbucket, GitVerse и много других полок разных цветов и юрисдикций. Все они работают на базе одной и той же магии. Вы отнесли папку на полку — запушили — и пошли пить кофе.

Чуть позже редактор сказал: «Не надо Олега, Олег уже был недавно. Верни лучше Ибрагима».

Вы вздохнули, взяли папку. Подумали. Зачеркнули строку «Ибрагим стал Олегом» и достали из папки блокнот — там осталась ещё одна копия. В блокноте снова Ибрагим, и никаким Олегом не пахнет.

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

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

Вы посмотрели на пухлый блокнот команды, посмотрели на свой — где текст полностью переработан и добавлены гуси, но нет ни одной правки команды, — и задумались.

Если выкинуть изменения команды, вас не позовут в пятницу на пиццу. Если выкинуть гусей — ну о чём вы, только не гусей.

В печали вы сложили оба блокнота вместе. И вдруг засиял зелёно-красный свет, а папка опять начала орать: «Конфликты, исправь конфликты!!»

Вы открыли блокнот — а там мёрж — прекрасно состыкованы обе версии, командная и ваша. Магия сама разобралась почти со всем. Но на некоторых строчках остались пометки: вот два варианта этой строки, выберите наиболее актуальный. Это те места, где вы и корректор правили одно и то же предложение, — тут магия не берётся угадывать, кто из вас прав.
Пулл-реквест
Вы просмотрели статью, вычеркнули лишнее и попытались положить блокнот обратно на полку.

Папка заорала: «Нет! Нет! Мне нужно мнение иллюстратора и корректора! Аааааа!»

На эти крики собралось пол-офиса, посмотрели ваши изменения, оставили комментарии прямо на полях, вы чего-то исправили. На этом папка успокоилась, и вы всей командой пошли отмечать пиццей свой первый закрытый пулл-реквест.
Публикуем!
Потом иллюстратор дорисовал гусей, а корректор ещё раз исправил опечатки. Наконец, все, включая редактора, довольны статьёй, и вы её публикуете — делаете релиз.

К сожалению, в этом моменте аналогия совершенно ломается, по нескольким причинам.

Во-первых, статья становится доступна читателям только после публикации. В реальном GitHub проект, если он публичный, доступен вот как только вы его впервые запушили (выставили на полку GitHub), а релиз это просто способ разработчиков сказать «вот этой версией мы вполне довольны, пользуйтесь ей». Но люди могли пользоваться и до релиза.

Во-вторых, после публикации работа над статьей, чаще всего, заканчивается. Разработчики же не перестают доделывать свой проект никогда (пока есть деньги, а некоторые продолжают и без них), и проект может жить и развиваться десятки лет с сотнями релизов.

Но идея, полагаю, вам ясна.
Ещё раз, что есть что
  • Проект — блокнот. Для программиста — код, для вас — текст, для дизайнера — макеты.
  • Рабочая копия — блокнот, черновик, который видите только вы.
  • Репозиторий — орущая папка: хранит проект, все его версии, авторов версий и обмены любезностями.
  • Коммит — запись на обороте папки и снимок блокнота.
  • Git — магия, которая заставляет папку орать, а тексты в блокноте — переписываться.
  • Github — полка. Кроме него есть GitLab, Bitbucket, GitVerse и другие полки. Все они работают на базе магии Git.
  • Ветка — разделитель в папке: ваши версии копятся отдельно от общих, не мешая им.
  • Мёрж — слияние двух блокнотов в один; магия стыкует всё сама, а спорные строки отдаёт на суд людям.
  • Пулл-реквест — «Посмотрите, пожалуйста, я тут гусей добавил, можно вливать?»
  • Релиз — помеченная точка в истории проекта, которую авторы считают достаточно готовой.
И зачем это всё?
Основные сценарии видны из нашей истории: сохранить версии, выбрать, от какой версии работать дальше, работать параллельно в команде, не выдирая друг у друга блокнот и клавиатуру. Так GitHub используют программисты.

А зачем это может пригодиться всем остальным?

Затем, что проект необязательно с кодом. Вопрос «А где последняя версия?» и файлы вида `статья_финал_финал2_правки_Иры_ОКОНЧАТЕЛЬНЫЙ.docx` — это ровно та проблема, которую Git решает. Документация, инструкции, регламенты, SQL-запросы, ноутбуки аналитика, спецификации к макетам — всё это живёт в папке лучше, чем в переписке.

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

Затем, что в вакансиях это спрашивают. Профиль на GitHub не замена опыту, но неплохой способ показать, что вы правда что-то делали, а не перечислили технологии в резюме.
А как это сделать самому?
Для первого раза хватит браузера. Заходите на GitHub, заводите профиль (он нужен, только чтобы делать своё; читать и скачивать чужие проекты можно и без него). Дальше прямо на сайте создаёте новый репозиторий — GitHub даже сам положит внутрь первый файл под названием README. Впишите в него гордое «Привет, мир!», нажмите зелёную кнопку и готово: ваш первый коммит и тут же пуш.

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

Юля Александрова, IT-копирайтер
t.me/shpuli
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website