$ sudo teach IT
Модуль 5 · GitHub · Урок 5.1

Знакомство с GitHub

Вы заведёте аккаунт на GitHub, защитите его и создадите пустой репозиторий, готовый принять вашу визитку.

Теория + практика~20 минутНовичокGitHubрепозиторий

Что такое GitHub

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

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

Git и GitHub — не одно и то же

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

Есть и другие сервисы такого рода (GitLab, Bitbucket), и устроены они похоже: всё, что вы узнаете про Git, работает с любым из них. Мы берём GitHub, потому что он самый популярный и у него есть бесплатный тариф, которого хватит на весь курс.

Что вы получите от GitHub в этом курсе:

  • резервную копию истории проекта в интернете;
  • публичную страницу проекта, ссылку на которую можно положить в резюме;
  • бесплатный хостинг сайта (GitHub Pages) — в конце модуля ваша визитка заработает по настоящему адресу;
  • инструменты командной работы — pull request, код-ревью, issues. Ими займёмся в следующем модуле.

Аккаунт и защита

Зарегистрируйтесь на github.com. Понадобятся почта, пароль и логин; GitHub попросит подтвердить почту. Детали формы регистрации меняются, поэтому идите по подсказкам на экране.

Логин — это ваш адрес на GitHub. Он попадёт в ссылки на репозитории (github.com/alex-ivanov/portfolio) и в адрес сайта (alex-ivanov.github.io). Выбирайте серьёзный: имя и фамилия латиницей подойдут лучше, чем cooldude2009, ведь ссылку увидят работодатели. В примерах курса логин — alex-ivanov; везде подставляйте свой.

Двухфакторная аутентификация

Аккаунт с вашей работой стоит защитить. Двухфакторная аутентификация (2FA) — это вход в два шага: после пароля нужно ввести ещё и одноразовый код. Украденный пароль тогда бесполезен. По документации GitHub, с марта 2023 года двухфакторную аутентификацию обязаны включить выбранные группы пользователей, которые публикуют код, а остальным её настоятельно рекомендуют. Включите её сразу, чтобы не зависеть от этих групп.

В настройках аккаунта (Settings, раздел про пароль и аутентификацию) GitHub предлагает несколько способов получать второй фактор: приложение-аутентификатор на телефоне, SMS, ключи безопасности, passkeys и приложение GitHub Mobile. Надёжнее всего приложение-аутентификатор. Когда будете включать, GitHub покажет коды восстановления: сохраните их в надёжное место, они спасут, если потеряете телефон.

Почта в коммитах и скрытый адрес

В каждом коммите Git записывает почту из user.email (вы задавали её в начале курса). Когда вы отправите репозиторий на GitHub, этот адрес станет виден всем, кто откроет историю публичного проекта. Если не хотите светить настоящую почту, откройте Settings, раздел Emails и включите Keep my email addresses private. GitHub выдаст специальный адрес вида ID+логин@users.noreply.github.com (точный адрес написан на той же странице), и его можно записать в user.email.

Важная деталь: по документации GitHub этот переключатель защищает действия, сделанные через сайт. Для коммитов из терминала важен именно user.email на вашем компьютере.

Создаём репозиторий

Репозиторий на GitHub в терминах Git — это удалённый репозиторий (по-английски remote): тот же репозиторий, но лежащий не у вас на диске, а на чужом сервере. Сначала его нужно создать пустым, а потом отправить в него историю. Пошагово:

  1. Войдите в GitHub. В правом верхнем углу нажмите значок плюса и выберите New repository («новый репозиторий»).
  2. В списке Owner («владелец») оставьте свой аккаунт.
  3. В поле имени репозитория впишите portfolio. Имя может содержать латинские буквы, цифры, точку, дефис и подчёркивание.
  4. В описании (по желанию) напишите: «Личный сайт-визитка. Учебный проект».
  5. Видимость выберите Public («публичный»): визитку смогут открыть все, и без этого не заработает бесплатная публикация сайта.
  6. Ничего из дополнительного не включайте: ни README, ни .gitignore, ни лицензию.
  7. Нажмите Create repository («создать репозиторий»).

Форма время от времени меняется, и надписи в ней могут отличаться от тех, что мы называем. Ориентируйтесь на смысл: имя, публичный доступ и три выключенные галочки.

Почему без README, .gitignore и лицензии

GitHub предлагает создать репозиторий сразу с этими файлами, и это удобно, когда проекта ещё нет. У вас он есть, и в нём уже два десятка коммитов. Если GitHub создаст свой первый коммит (с README), у двух репозиториев окажутся разные истории с разным началом, и Git потом откажется их объединять. Эта ошибка разобрана в конце урока. Документация GitHub тоже советует пропускать эти файлы, если вы переносите существующий проект.

Экскурсия по странице репозитория

После Create repository вы окажетесь на странице нового репозитория. Файлов в нём нет, поэтому GitHub показывает подсказку с командами (в документации она называется «Quick Setup»). Среди них есть блок про то, как отправить уже существующий проект из командной строки. Его мы разберём в следующем уроке, а пока осмотритесь. Вкладки над списком файлов:

ВкладкаЧто это
CodeФайлы проекта, история коммитов, зелёная кнопка Code со ссылками для клонирования.
IssuesЗадачи и баги проекта: «добавить страницу контактов», «ссылка не работает».
Pull requestsПредложения изменений, которые обсуждают перед слиянием. Это тема следующего модуля.
SettingsНастройки: имя и видимость репозитория, публикация сайта (Pages), права, удаление.

Самое важное сейчас — адрес репозитория. Он состоит из логина и имени репозитория, и в этом курсе он выглядит так:

Конфиг · адреса репозитория
HTTPS: https://github.com/alex-ivanov/portfolio.git
SSH:   git@github.com:alex-ivanov/portfolio.git

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

Попробуйте переключаться между вкладками HTTPS и SSH в окне кнопки Code: адрес меняется, а репозиторий остаётся тем же.

Практика у себя

  1. Зарегистрируйтесь на GitHub (если аккаунта ещё нет) и подтвердите почту.
  2. Включите двухфакторную аутентификацию и сохраните коды восстановления.
  3. Откройте Settings, раздел Emails, и решите, скрывать ли почту. Если включили скрытие, запомните noreply-адрес.
  4. Создайте репозиторий portfolio: Public, без README, без .gitignore, без лицензии.
  5. Откройте страницу нового репозитория и найдите кнопку Code. Скопируйте HTTPS-адрес и запишите его, он нужен в следующем уроке.

Проверьте себя

  • Адрес репозитория выглядит как https://github.com/ваш-логин/portfolio.
  • На странице репозитория нет ни одного файла, а GitHub показывает подсказку с командами.
  • В профиле включена двухфакторная аутентификация.
  • Вы можете ответить: чем Git отличается от GitHub.

Частые ошибки

Создали репозиторий с README, а потом отправляете проект

Что видно: первая же отправка проекта заканчивается отказом, а попытка забрать README командой git pull — ещё одним:

Терминал
$ git pull origin main
fatal: refusing to merge unrelated histories

Почему: на GitHub уже есть свой первый коммит (создание README), а у вас — собственная история с другим началом. «Unrelated histories» значит «истории без общего предка». Как исправить, если репозиторий новый и в нём нет ничего ценного: самое простое — удалить его и создать заново, на этот раз без README. Для этого откройте Settings, внизу страницы раздел Danger Zone, нажмите Delete this repository и подтвердите, вписав имя. Если README нужно сохранить, можно объединить истории командой git pull origin main --allow-unrelated-histories (опция есть у git pull и git merge). Скорее всего, Git сообщит о конфликте в README.md, потому что файл есть в обеих историях; решается он как любой другой конфликт слияния.

Опечатка в логине или имени репозитория

Логин поменять можно, но все ссылки на ваши репозитории при этом поменяются. Имя репозитория тоже можно исправить в Settings. Раз вы только начали, лучше сразу выбрать то, что не придётся менять: имя portfolio и спокойный логин.

Приватный репозиторий и сайт

Если выбрать Private, смотреть репозиторий сможете только вы и приглашённые. Для переноса проекта это нормально, но по документации GitHub на бесплатном тарифе опубликовать сайт через GitHub Pages можно только из публичного репозитория. Поэтому визитке нужен Public. Видимость можно поменять позже в Settings.

Публичный репозиторий видят все

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

Подробно о создании репозитория — в документации GitHub.

Что важно запомнить

  • Git — программа на вашем компьютере, GitHub — сайт, где хранятся репозитории Git.
  • Логин на GitHub — часть вашего адреса, поэтому выбирайте его всерьёз. Двухфакторную аутентификацию включайте сразу.
  • Репозиторий на GitHub создаётся кнопкой New repository; для готового проекта он должен быть пустым — без README, .gitignore и лицензии.
  • Для публикации сайта на бесплатном тарифе репозиторий должен быть публичным.
  • У репозитория два адреса, HTTPS и SSH. Оба ведут в одно место.

Репозиторий на GitHub есть, но он пока пуст, а вся ваша история лежит дома. Как связать эти два репозитория и отправить в интернет все коммиты, мы разберём в следующем уроке.

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