Рассмотрим как нам отправить код проекта на GitHub и настроить SSH-ключи для работы с системой контроля версий.

Большинство компаний используют разные сайты - GitHub, GitLab, BitBucket и др. Но мы будем использовать GitHub.

Переходим на сайт github.com и регистрируемся, если вы этого еще не сделали.

Вводим имя пользователя (Username), почту (Email) и пароль (Password). После чего Giyhub спросит про тариф. Выбираем бесплатный. Вы увидите фразу: Unlimited public repositories for free. Это то, что нам нужно.

В конце рассказываем про опыт и всё, регистрация завершена. Этот шаг можно пропустить.

Теперь мы можем опубликовать первый проект. Нажимаем Start a project.

И вводим имя нашего первого проекта и репозиотория:

Далее выбираем тип репозитория - Публичный (public) или Приватный (private). Приватный репозиторий - платная услуга. Публичный репозиторий будет доступен всем в Интернете.

Дальше нас GitHub спросит про создание файла README для проекта. Мы не будем ставить галочку, т.к. у нас уже есть локальный проект с историей.

Теперь жмем Create Repository (создать репозиторий).

Репозиторий создан и мы сразу видим, что Github подсказывает что нам делать далее. У нас сразу есть возможность выбрать протокол - HTTPS или SSH. Мы выбираем SSH.

Т.к. у нас уже есть репозиторий локально, то нам нужно обращать внимание на команды в этом блоке: …or push an existing repository from the command line. Мы будем использовать команды из него.

Т.е. мы используем в Cmder команду:

$ git remote add origin https://github.com/sergeiermilov/uzabila-carousel.git

В удаленный репозиторий можно отправлять файлы и получать их из него.

Сама команда git remote add - добавляет удаленный репозиторий, а origin - общее признанное имя. Проверим, что репозиторий добавился:

$ git remote -v

Посмотрим что покажет терминал:

Git показал нам две origin строчки - fetch и push. Fetch - это мы можем забирать изменения, а Push - отправлять изменения.

Дальше GitHub нам рекомендовал команду:

$ git push -u origin main
// или git push -u origin master

Если вы увидели ошибку:

error: src refspec master does not match any.  
error: failed to push some refs to 'ssh://xxxxx.com/project.git'

То это, скорее всего, означает, что имя ветки не совпало с указанным в команде. Например в коде выше я ввел:

$ git push -u origin main

Хотя моя ветка называлась master.

Далее мы получаем ошибку:

Permission denied (publickey).
Fatal: Could not read from remote repository.

GitHub не может нас узнать, т.к. мы авторизованы в браузере, но не в консоли. Мы добавили репозиторий с протоколом SSH - протоколом безопасного соединения между компьютерами. Его используют не только на GitHub, так, через SSH системные администраторы управляют серверами.

Чтобы авторизоваться в GitHub по SSH нам нужно сгенерировать SSH-ключи - публичный и приватный. Приватный ключ нужно держать в секрете.

В домашней папке создаем папку .ssh и перейдем в нее:

$ mkdir ~/.ssh
$ cd ~/.ssh

Теперь генерируем пару ключей командой:

$ ssh-keygen -t rsa -b 4096 -C "<your_email>"

Пару ключей для Github мы генерируем только один раз.

Теперь нас спросят про название ключа, где пишем свое имя, т.к. лучше не использовать стандартное, которое предлагает терминал. После этого нас попросят указать пароль. Здесь мы можем оставить пароль пустым и нажать Enter. И теперь еще раз Enter для подтверждения пароля.

Теперь в папке .ssh будут два файла - один без расширения - приватный ключ, а второй с расширением .pub - публичный ключ.

Публичный ключ мы должны загрузить на Github и для этого мы переходим на сайт github.com и далее переходим в Настройки (Settings). В настройках выбираем пункт: SSH and GPG keys.

Жмем New SSH key.

Вводим название (title) и далее нам нужно в поле ключ (key) вставить содержимое ключа, которое мы скопируем из консоли после использования команды cat, и здесь используем публичный ключ. В названии я использую имя компьютера на котором работаю, но можно вводить что угодно.

Выделяем ключ (весь текст от слова ssh-... вместе с email), копируем его в Github и далее жмем Add SSH key:

Теперь нужно проверить, что github нас узнает (указываем приватный ключ):

$ ssh -T -i ~/.ssh/<file_name_private_key> git@github.com

Github с нами поздоровается:

Проверка связи с сайтом без приватного ключа приведет к ошибке:

$ ssh -T git@github.com
// Ошибка: Permission denied (publickey)

Чтобы при соединении с GitHub всегда использовался нужный ключ мы должны в настройках SSH указать этот ключ. Настройки SSH хранятся в папке .ssh и в файле config локального домашнего пользователя. Добавляем информацию об использовании для хоста github.com определенный ключ:

Host github.com
	IdentityFile ~/.ssh/<key_file_name>

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

Теперь заново пробуем соединиться с гитхабом:

$ ssh -T git@github.com

Теперь всё получилось:

Теперь мы можем вернуться в репозиторий и отправить изменения на GitHub:

$ git push -u origin master

Если перейти на Гитхаб и посмотреть репозиторий, то мы увидим все файлы, которые были отправлены из локального репозитория.