Урок 3 из 19   Урок 4  

Урок 3: Распределённый репозиторий, Github

В этом уроке мы научимся загружать наши git-репозитории в удалённый сервис github.com, чтобы с ними можно было работать с любого компьютера и ими можно было делиться с другим разработчиками.

План урока

  1. Что такое распределённый репозиторий
  2. Создание аккаунта на github.com
  3. Настройка доступа по SSH
  4. Первый публичный репозиторий
* * *

Что такое распределённый репозиторий

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

Распределённый репозиторий решает очень много задач:

  1. Надёжность: ваш код всегда храниться на удалённых серверах. Если с вашим компьютером что-то случиться, вы просто скачаете код заново.
  2. Удобство: вы можете клонировать ваш код на все ваши компьютеры. На работе, дома. Можете даже смотреть код с планшета или мобильного устройства, если вам это вдруг понадобится.
  3. Распределённость: если над программой работает целая команда программистов, то каждый из них работает со своей версией кода, а потом они могут легко объединить их.
  4. Версионность: любой, кому вы дадите доступ, сможет скачать нужную ему версию вашей программы, если вдруг по какой-то причине его железо или ОС не совместима с последней.
  5. Открытый код (OpenSourse): если вы сделаете ваш проект открытым, другие разработчики смогут смотреть, что вы написали и помогать вам в разработке, если ваша программа окажется для них полезной. Вы также сможете показать исходный код ваших программ потенциальным работодателям.

Как устроен распределённый репозиторий

Распределённый репозиторий — это, фактически, удалённая копия вашей программы, которую вы делаете с помощью git (или другой системы контроля версий) на удалённом сервере, доступном через интернет.

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

Схема работы разработчиков с удалённым репозиторием

Что такое github.com?

Сайтов, предлагающих создавать с их помощью публичные репозитории довольно много. Мы сейчас остановимся на самом популярном из них github.com.

Вот так, например, выглядит страница популярного фреймворка Ruby on Rails на сервисе github.com:

Исходный код фреймворка rails на github.com

Мы неоднократно бывали на похожих страницах других проектов и библиотек в базовом блоке нашего курса.

Создание аккаунта на github-е

Для того, чтобы пользоваться сервисом github необходимо создать там аккаунт. Пока выбирайте бесплатный тариф. Нам он вполне подойдёт. Интерфейс github-а часто меняется, поэтому мы не приводим тут снимков экрана, чтобы вас не запутать.

Главное, на что вам нужно обратить внимание — имя вашего пользователя на github. Оно часто будет использоваться в этом уроке, так что запомните его хорошенько. Во всех командах мы будем писать вместо него <username>.

Для того, чтобы подключить ваш github-аккаунт к нашему локальному репозиторию, необходимо познакомиться с концепцией ssh.

Что такое SSH

Вход на любой сервер в наше время закрыт, чтобы кто попало не ходил. Как замок на подъезде. Можно входить кодом (по паролю): так вы заходите в контакт, в одноклассники, в фейсбук и на любые другие сайты. Браузер запоминает ваши данные и повторно их уже не спрашивает.

Некоторые сервера (такие, например, как github), поддерживают авторизацию по SSH. Это как ключ от подъезда: специальный файлик, который играет роль пароля, но зашифрованного, передаваемый каждый раз при входе на сервер.

Авторизация по SSH позволяет ускорить вход на сервер, ведь в современном мире все сервера постоянно общаются между собой. За рабочий день программист может заходить на github сотни раз. Не вводить же ему пароль каждый раз. Для этого используются SSH-ключи.

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

Генерация SSH-ключа

На github-е есть страничка, посвящённая генерации ключа, но мы, на всякий случай, приведём основные шаги здесь.

Откройте консоль git-а (в прошлом уроке мы добавили при установке её иконку на рабочий стол) и выполните команду

ssh-keygen

Программа спросит вас, где создать пару файлов ключа. По умолчанию ключ создаётся в домашней директории в папке .ssh. Нас это устраивает: просто нажмите Enter. А потом программа попросит нас ввести ключевую фразу для ключа: это по сути микропароль, который вы будете вводить каждый раз при использовании ключа. Рекомендуем вам пока оставить это поле пустым: просто ещё раз нажмите Enter.

Вуаля! Мы сгенерили ключ. Его публичная часть лежит по адесу C:\users\<username>\.ssh\id_rsa.pub.

Откройте этот файл в любом текстовом редакторе (например, в нашем любимом Sublime) и скопируйте его содержимое.

Найдите на github раздел для добавления ключей и создайте новый ключ: вставьте в поле key то, что вы скопировали в файле id_rsa.pub и нажмите Add Key

Добавляем ssh-ключи на github

Всё, теперь мы подружили github с нашим локальным пользователем и можно добавлять удалённый репозиторий к нашей программе.

Создание нового репозитория на github

Давайте теперь создадим новый репозиторий в папке урока rubytut2/lesson3 и добавим его в наш github аккаунт. Напишем программу, которая выбирает из колоды 52 карт произвольную.

Начнём с того, что создадим на github-е новый репозиторий. Самое главное для нас, как он будет называться: назовём его pick_a_card.

Обратите внимание, что на бесплатном тарифе вы можете создавать только публичные репозитории. Они видны всем и только такие у нас в курсе и будут. Этого нам вполне достаточно, нам пока скрывать нечего. Приватные репозитории на github-е можно создавать только за деньги. Бесплатно приватные репозитории можно создавать, например, с помощью сервиса bitbucket.org.

git remote

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

cd rubytut2/lesson3
git init pick_a_card
cd pick_a_card

Откроем проект pick_a_card в RubyMine и создадим файл .gitignore и добавим туда строчку

.idea

После этого напишем нашу программу в файле pick_a_card.rb:

# Массивы с наборами мастей и достоинств
values = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
suits = ['Diamonds', 'Hearts', 'Clubs', 'Spades'] # Буби, Черви, Крести, Пики

# Выведем произвольную карты, выбрав по одному элементу из массивов
puts "#{values.sample} of #{suits.sample}"

Добавим файлы .gitignore и pick_a_card.rb в репозиторий (можно добавлять файлы с помощью git add, указывая их через пробел) и сделаем первый комит:

git add .gitignore pick_a_card.rb
git commit -m "Initial commit"

Пришло время привязать наш удалённый репозиторий к локальному. Это делается с помощью команды git remote. Вам необходимо указать название удалённого репозитория. Обычно, он называется origin и мы именно так и советуем его вам назвать.

git remote add origin https://github.com/<username>/pick_a_card.git

Посмотреть все удалённые репозитории, привязанные к текущему можно с помощью команды

git remote show

git push

Удалённый репозиторий привязан к локальному, но чтобы в удалённом появились ваши изменения (собственно, написанная нами программа) этого недостаточно. Необходимо сообщить git-у, что мы хотим синхронизировать изменения.

Для синхронизации изменений в git-е есть две команды: git pull и git push.

Перед синхронизацией ещё один нюанс: git синхронизирует ветки (что это такое — читайте в доп. материалах). Мы уже затрагивали понятие ветки master — главной ветки нашего локального репозитория. Удалённый репозиторий ничем не хуже. У него тоже есть свой master.

Именно с ним мы и будем синхронизировать нашу локальную ветку master.

git push -u origin mater

Всё, мы, наконец, синхронизировали на код с удалённым репозиторием. Можно зайти на github и посмотреть на наш проект:

Наш первый удалённый репозиторий!

git pull

Теперь давайте прямо на сайте github.com добавим в нашу программу файл README.txt. Для этого в интерфейсе github-а создайте в корне проекта новый файл и напишите там описание нашей программы.

Программа, которая выбирает произвольную карту из колоды 52 карты

Чтобы эти изменения попали в удалённый репозиторий, также необходимо сделать комит. Github сделает его за вас, просто укажите сообщение «Добавили README.txt».

Теперь, чтобы получить этот файл в локальном репозитории, наберите команду

git pull

RubyMine увидит файл README.txt в вашем проекте. Вы также можете убедиться, что комит на месте с помощью команды git log.

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

В процессе обучения на нашем курсе в вашем аккаунте не github-е наберётся много прикольных программ: это будет ваше некое портфолио, которые вы потом сможете показать работодателю.

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

Поздравляем! Вы теперь умеете загружать ваши программы на сервис хранения github.com.

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