Что такое 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): тот же репозиторий, но лежащий не у вас на диске, а на чужом сервере. Сначала его нужно создать пустым, а потом отправить в него историю. Пошагово:
- Войдите в GitHub. В правом верхнем углу нажмите значок плюса и выберите New repository («новый репозиторий»).
- В списке Owner («владелец») оставьте свой аккаунт.
- В поле имени репозитория впишите
portfolio. Имя может содержать латинские буквы, цифры, точку, дефис и подчёркивание. - В описании (по желанию) напишите: «Личный сайт-визитка. Учебный проект».
- Видимость выберите Public («публичный»): визитку смогут открыть все, и без этого не заработает бесплатная публикация сайта.
- Ничего из дополнительного не включайте: ни README, ни
.gitignore, ни лицензию. - Нажмите 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: адрес меняется, а репозиторий остаётся тем же.
Практика у себя
- Зарегистрируйтесь на GitHub (если аккаунта ещё нет) и подтвердите почту.
- Включите двухфакторную аутентификацию и сохраните коды восстановления.
- Откройте Settings, раздел Emails, и решите, скрывать ли почту. Если включили скрытие, запомните noreply-адрес.
- Создайте репозиторий
portfolio: Public, без README, без.gitignore, без лицензии. - Откройте страницу нового репозитория и найдите кнопку 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 есть, но он пока пуст, а вся ваша история лежит дома. Как связать эти два репозитория и отправить в интернет все коммиты, мы разберём в следующем уроке.