Что такое GitHub и чем он отличается от Git
Git - программа на вашем компьютере, которая хранит историю изменений кода. GitHub - сайт, где эта история лежит на сервере: туда отправляют код, там его смотрят коллеги, обсуждают правки и запускают автоматические проверки. Git работает и без GitHub, а вот GitHub без Git бесполезен.
Новичку GitHub нужен по трем причинам. Во-первых, это резервная копия: ноутбук сломался, а код на месте. Во-вторых, это портфолио: рекрутеры и тимлиды смотрят профиль кандидата на junior-позицию. В-третьих, почти все команды работают через pull request, и навык открыть PR и ответить на ревью проверяют уже на стажировке.
| Понятие | Что это простыми словами |
|---|---|
| Репозиторий (repo) | Папка проекта со всей историей изменений |
| Commit | Снимок изменений с описанием |
| Push | Отправка ваших коммитов на GitHub |
| Pull | Загрузка чужих коммитов с GitHub к себе |
| Branch | Отдельная линия разработки, например под одну задачу |
| Fork | Ваша копия чужого репозитория в вашем аккаунте |
| Pull request (PR) | Предложение влить изменения из одной ветки в другую |
| Issue | Задача или сообщение об ошибке в проекте |
Если команды Git для вас пока новы, держите под рукой шпаргалку по командам Git: здесь мы разбираем именно работу с сайтом и связку компьютер - GitHub.
Регистрация и настройка профиля
Регистрация на github.com занимает пару минут: почта, пароль, имя пользователя. Логин потом будет в адресах всех ваших репозиториев, поэтому выбирайте нейтральный, лучше латиницей и похожий на имя.
- Подтвердите почту из письма, иначе часть функций будет недоступна.
- Включите двухфакторную аутентификацию в Settings - Password and authentication. Для аккаунтов, которые публикуют код, GitHub ее требует.
- Заполните профиль: фото или аватар, пара строк о себе, город, ссылка на Telegram или резюме.
- Создайте репозиторий с именем, совпадающим с вашим логином. Его README.md GitHub покажет на главной странице профиля - это ваша витрина.
Почту, которую вы указали в git config user.email, добавьте в Settings - Emails. Тогда коммиты будут привязаны к профилю и появятся зеленые квадраты активности.
Как подключить компьютер к GitHub: SSH-ключ или токен
С августа 2021 года GitHub не принимает пароль от аккаунта при работе через Git в терминале. Подключиться можно двумя способами: по HTTPS с персональным токеном или по SSH-ключу. SSH настраивается один раз и дальше не требует ничего вводить, поэтому начнем с него.
Настройка SSH-ключа
- Создайте ключ командой
ssh-keygen -t ed25519 -C "you@example.com". На Windows она работает в Git Bash и PowerShell. - На вопросы можно нажимать Enter. Ключи появятся в папке
~/.ssh: приватныйid_ed25519и публичныйid_ed25519.pub. - Скопируйте содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pub. - На GitHub откройте Settings - SSH and GPG keys - New SSH key, вставьте ключ и сохраните.
- Проверьте связь командой ниже.
ssh-keygen -t ed25519 -C "you@example.com"
cat ~/.ssh/id_ed25519.pub
ssh -T git@github.com
В ответ на последнюю команду придет приветствие с вашим логином. Приватный ключ никому не отправляйте и не кладите в репозитории.
Вариант с токеном
Если SSH заблокирован в сети (бывает в офисах и вузах), создайте токен в Settings - Developer settings - Personal access tokens. Fine-grained токен можно ограничить конкретными репозиториями и сроком действия. Когда Git попросит пароль при push, вставьте токен вместо пароля. На Windows Git Credential Manager обычно запоминает его сам, а иногда предлагает вход через браузер.
Как создать репозиторий на GitHub и загрузить проект
Есть два сценария: проект уже лежит у вас на диске или вы начинаете с нуля на сайте. Разберем первый, он встречается чаще.
- На GitHub нажмите плюс в правом верхнем углу - New repository.
- Укажите имя, например
todo-app, выберите Public или Private. - Галочки README, .gitignore и License не ставьте, если код уже есть локально, иначе при первом push получите конфликт историй.
- Нажмите Create repository и скопируйте SSH-адрес вида
git@github.com:login/todo-app.git. - В папке проекта выполните команды ниже.
git init
git add .
git commit -m "Первая версия"
git branch -M main
git remote add origin git@github.com:login/todo-app.git
git push -u origin main
Обновите страницу репозитория, файлы на месте. Дальше цикл короткий: правите код, делаете git add, git commit и git push.
Если начинаете с нуля, создайте репозиторий на сайте сразу с README и .gitignore под ваш язык, а потом заберите его командой git clone git@github.com:login/todo-app.git.
Push и pull: как синхронизировать код
git push отправляет ваши коммиты на GitHub, git pull забирает чужие. Когда вы работаете один с двух компьютеров (дома и в офисе) или вдвоем над учебным проектом, привычка одна: начали работу - сделали pull, закончили - push.
git pull # забрать свежие изменения
# ... работаете ...
git add .
git commit -m "Добавил фильтр задач"
git push
Если push отклонен с сообщением про fetch first, значит, на сервере появились коммиты, которых у вас нет. Сделайте git pull, при конфликте поправьте файлы, закоммитьте и повторите push. Флаг --force без понимания последствий не используйте: он перезапишет историю на сервере.
Перед первым push проверьте, что в репозиторий не попали файлы .env, ключи API и пароли. По публичным репозиториям постоянно ходят боты, которые ищут секреты. Добавьте такие файлы в .gitignore до первого коммита, а если ключ все-таки утек, сразу отзовите его в сервисе, удаление файла из репозитория не поможет.
Как сделать pull request: пошагово
Pull request - это просьба влить ваши изменения из одной ветки в другую, обычно в main. На PR коллеги оставляют комментарии к строкам кода, запускаются тесты, и только после одобрения код попадает в основную ветку.
PR в своем или командном репозитории
- Создайте ветку под задачу:
git switch -c feature/search. - Внесите правки и закоммитьте их.
- Отправьте ветку:
git push -u origin feature/search. - На странице репозитория появится желтая плашка с кнопкой Compare & pull request. Нажмите ее.
- Проверьте направление: base -
main, compare - ваша ветка. Напишите заголовок и описание: что сделано, зачем, как проверить. - Нажмите Create pull request и назначьте ревьюера справа в блоке Reviewers.
- Получили замечания - исправьте код в той же ветке, сделайте commit и push. PR обновится сам.
- После одобрения нажмите Merge pull request и удалите ветку кнопкой Delete branch.
PR в чужой проект через fork
Прав на запись в чужой репозиторий у вас нет, поэтому сначала нажмите Fork: GitHub создаст копию проекта в вашем аккаунте. Клонируйте форк, сделайте ветку, правки и push в свой форк. Кнопка открытия PR предложит отправить изменения в исходный репозиторий. Перед этим прочитайте файл CONTRIBUTING.md, если он есть, и поищите задачи с меткой good first issue - их специально оставляют для новичков.
Чтобы форк не отставал от оригинала, нажимайте Sync fork на его странице или добавьте исходный репозиторий как второй remote: git remote add upstream <адрес> и забирайте изменения через git pull upstream main.
Issues, Actions и другие функции для новичка
Кроме хранения кода GitHub умеет много полезного, и часть этого бесплатна для публичных репозиториев.
- Issues. Список задач и багов проекта. Можно ссылаться на задачу в коммите: строка
Fixes #12в описании PR закроет issue номер 12 после слияния. - GitHub Actions. Автоматический запуск тестов и линтеров на каждый push. Настраивается YAML-файлом в папке
.github/workflows. - GitHub Pages. Бесплатный хостинг статического сайта прямо из репозитория. Подходит для портфолио на HTML, CSS и JavaScript.
- README.md. Описание проекта в Markdown. Хороший README с целью проекта, скриншотом и инструкцией запуска заметно повышает шансы, что рекрутер досмотрит репозиторий.
- GitHub CLI. Утилита
ghпозволяет создавать репозитории и PR из терминала:gh pr create.
Сравнение похожих площадок, если GitHub по каким-то причинам не подходит:
| Сервис | Особенность | Кому подходит |
|---|---|---|
| GitHub | Крупнейшее сообщество, open source, Actions | Портфолио, открытые проекты |
| GitLab | Встроенный CI/CD, можно развернуть у себя | Компании с собственными серверами |
| Gitflic | Российский сервис с серверами в РФ | Проекты с требованием хранить код в России |
| Bitbucket | Интеграция с Jira | Команды на продуктах Atlassian |
Типичные ошибки новичков на GitHub
- Permission denied (publickey). SSH-ключ не добавлен в аккаунт или Git использует другой ключ. Проверьте командой
ssh -T git@github.com. - Support for password authentication was removed. Вы ввели пароль от аккаунта. Нужен токен или SSH.
- refusing to merge unrelated histories. Создали репозиторий на сайте с README, а локально тоже есть история. Решение:
git pull origin main --allow-unrelated-histories, затем push. - Коммиты не засчитываются в профиль. Почта в
git configне совпадает с почтой в аккаунте. - Огромный репозиторий. В него попала папка
node_modulesили виртуальное окружение. Добавьте их в.gitignore. Как правильно создавать окружение для Python, описано в статье про venv.
Собрать портфолио на GitHub - хороший шаг на пути из статьи как стать программистом с нуля. Больше материалов о системах контроля версий - по тегу Git.
