# Github

Дело в том, что сам git делится на два компонента: локальный и серверный. Ранее мы с вами разбирались в устройстве локальной программы git, а теперь настало время связать наш локальный git с его облачным компонентом.

Существуют несколько провайдеров, которые предоставляют удобный интерфейс до серверного git. Одним из таких монополистов является Github.

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

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

Github является главным хранилищем исходного кода большинства `open source` программ. Open source - программы с открытым исходным кодом, в развитие которых может принимать каждый желающий.

К сожалению на github сильно усложнился процесс авторизации, но чтобы его облегчить, давайте привяжем `SSH` ключ.

## SSH ключи

SSH-ключи - это уникальные идентификаторы для пользователей, которые обеспечивают безопасное и защищенное подключение к удаленным серверам.

Они используются для аутентификации пользователя при подключении к серверу по протоколу SSH и представляют собой пару ключей, публичный и приватный.

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

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

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

Для того, чтобы привязать ваш SSH-ключ к Github необходимо его сначала создать. Команда универсальна для большинства операционных систем: `ssh-keygen -t rsa`. Данная команда создаст в вашем домашнем каталоге (`/home/$USER/` для Linux, `/Users/$USER/`) подкаталог `.ssh` в котором вы сможете найти 2 файла: `id_rsa` и `id_rsa.pub`. Первый это наш приватный ключ, второй - публичный. Давайте выведем содерживое публичного ключа в консоль с помощью команды `cat ~/.ssh/id_rsa.pub`, скопируйте полученный текст, зайдите в настройки аакаунта на Github и вставьте ваш ключ в разделе `SSH keys and GPG keys`.

Для того чтобы связать наш локальный репозитрий с удаленным необходимо воспользоваться командой:

`git remote add origin git@github.com:логин/название_удаленного_репозитория.git`

Будьте внимательны, Github может предлагать вам URL на базе HTTPS или SSH. Вам необходим _SSH_ URL.

После этого вы можете отправлять ваши локальные коммиты в удаленный с помощью команды `git push`

## Задание

* [Зарегистрируйтесь на Github](https://github.com/signup?ref_cta=Sign+up\&ref_loc=header+logged+out\&ref_page=%2Fsign_up\&source=header)
* Создайте пару SSH ключей и добавьте ваш публичный ключ на Github
* [Создайте новый репозитрий в котором будет храниться ваш проект](https://github.com/new)
* Так как никому не интересен ваш учебный проект, то давайте сделаем его приватным, а после создания репозитория в его настройках выдайте права для пользователя с email `ruby_course@rambler.ru` (меня)
* привяжите ваш локальный репозиторий к удаленному.
* Отправьте изменения в удаленный репозиторий.
* Отправьте мне на email URL вашего удаленного git репозитория.
