Урок 3: Распределённый репозиторий, Github
В этом уроке мы научимся загружать наши git-репозитории в удалённый сервис github.com, чтобы с ними можно было работать с любого компьютера и ими можно было делиться с другим разработчиками.
План урока- Что такое распределённый репозиторий
- Создание аккаунта на github.com
- Настройка доступа по SSH
- Первый публичный репозиторий
Представьте, что ваша программа приносит прибыль в сотни тысяч долларов, но хранится только на вашем компьютере. И этот компьютер внезапно сломался. Или утонул. Или его украли. Обидно, да?
Распределённый репозиторий решает очень много задач:
- Надёжность: ваш код всегда храниться на удалённых серверах. Если с вашим компьютером что-то случиться, вы просто скачаете код заново.
- Удобство: вы можете клонировать ваш код на все ваши компьютеры. На работе, дома. Можете даже смотреть код с планшета или мобильного устройства, если вам это вдруг понадобится.
- Распределённость: если над программой работает целая команда программистов, то каждый из них работает со своей версией кода, а потом они могут легко объединить их.
- Версионность: любой, кому вы дадите доступ, сможет скачать нужную ему версию вашей программы, если вдруг по какой-то причине его железо или ОС не совместима с последней.
- Открытый код (OpenSourse): если вы сделаете ваш проект открытым, другие разработчики смогут смотреть, что вы написали и помогать вам в разработке, если ваша программа окажется для них полезной. Вы также сможете показать исходный код ваших программ потенциальным работодателям.
Распределённый репозиторий — это, фактически, удалённая копия вашей программы, которую вы делаете с помощью git (или другой системы контроля версий) на удалённом сервере, доступном через интернет.
После этого все, кому вы дадите доступ (в т.ч. и вы сами), смогут скачивать вашу программу, вносить в неё изменения и загружать их на удалённый сервер с помощью всё того же git. Ваша программа становится продуктом коллективного творчества автоматически, каждый разработчик (в т.ч. и вы) абсолютно равноправен.
Что такое github.com?Сайтов, предлагающих создавать с их помощью публичные репозитории довольно много. Мы сейчас остановимся на самом популярном из них github.com.
Вот так, например, выглядит страница популярного фреймворка Ruby on Rails на сервисе github.com:
Мы неоднократно бывали на похожих страницах других проектов и библиотек в базовом блоке нашего курса.
Создание аккаунта на github-еДля того, чтобы пользоваться сервисом github необходимо создать там аккаунт. Пока выбирайте бесплатный тариф. Нам он вполне подойдёт. Интерфейс github-а часто меняется, поэтому мы не приводим тут снимков экрана, чтобы вас не запутать.
Главное, на что вам нужно обратить внимание — имя вашего пользователя на github. Оно часто будет использоваться в этом уроке, так что запомните его хорошенько. Во всех командах мы будем писать вместо него <username>.
Для того, чтобы подключить ваш github-аккаунт к нашему локальному репозиторию, необходимо познакомиться с концепцией ssh.
Что такое SSHВход на любой сервер в наше время закрыт, чтобы кто попало не ходил. Как замок на подъезде. Можно входить кодом (по паролю): так вы заходите в контакт, в одноклассники, в фейсбук и на любые другие сайты. Браузер запоминает ваши данные и повторно их уже не спрашивает.
Некоторые сервера (такие, например, как github), поддерживают авторизацию по SSH. Это как ключ от подъезда: специальный файлик, который играет роль пароля, но зашифрованного, передаваемый каждый раз при входе на сервер.
Авторизация по SSH позволяет ускорить вход на сервер, ведь в современном мире все сервера постоянно общаются между собой. За рабочий день программист может заходить на github сотни раз. Не вводить же ему пароль каждый раз. Для этого используются SSH-ключи.
Чтобы это всё организовать, вам нужно создать ключ: он состоит из двух файликов: приватного и публичного. Приватный остаётся на вашем компьютере и никому его давать нельзя. Публичный отдаётся серверу, чтобы он вас могу узнать.
Генерация SSH-ключаНа github-е есть страничка, посвящённая генерации ключа, но мы, на всякий случай, приведём основные шаги здесь.
Откройте консоль git-а (в прошлом уроке мы добавили при установке её иконку на рабочий стол) и выполните команду
Программа спросит вас, где создать пару файлов ключа. По умолчанию ключ создаётся в домашней директории в папке .ssh . Нас это устраивает: просто нажмите Enter . А потом программа попросит нас ввести ключевую фразу для ключа: это по сути микропароль, который вы будете вводить каждый раз при использовании ключа. Рекомендуем вам пока оставить это поле пустым: просто ещё раз нажмите Enter .
Вуаля! Мы сгенерили ключ. Его публичная часть лежит по адесу C:\users\<username>\.ssh\id_rsa.pub .
Откройте этот файл в любом текстовом редакторе (например, в нашем любимом Sublime) и скопируйте его содержимое.
Найдите на github раздел для добавления ключей и создайте новый ключ: вставьте в поле key то, что вы скопировали в файле id_rsa.pub и нажмите Add Key
Всё, теперь мы подружили github с нашим локальным пользователем и можно добавлять удалённый репозиторий к нашей программе.
Создание нового репозитория на githubДавайте теперь создадим новый репозиторий в папке урока rubytut2/lesson3 и добавим его в наш github аккаунт. Напишем программу, которая выбирает из колоды 52 карт произвольную.
Начнём с того, что создадим на github-е новый репозиторий. Самое главное для нас, как он будет называться: назовём его pick_a_card.
Обратите внимание, что на бесплатном тарифе вы можете создавать только публичные репозитории. Они видны всем и только такие у нас в курсе и будут. Этого нам вполне достаточно, нам пока скрывать нечего. Приватные репозитории на github-е можно создавать только за деньги. Бесплатно приватные репозитории можно создавать, например, с помощью сервиса bitbucket.org.
git remoteДавайте учиться привязывать удалённые репозитории к локальным. Для этого, как мы это делали в первом уроке, создадим локальный репозиторий:
Откроем проект pick_a_card в RubyMine и создадим файл .gitignore и добавим туда строчку
После этого напишем нашу программу в файле pick_a_card.rb :
Добавим файлы .gitignore и pick_a_card.rb в репозиторий (можно добавлять файлы с помощью git add , указывая их через пробел) и сделаем первый комит:
Пришло время привязать наш удалённый репозиторий к локальному. Это делается с помощью команды git remote . Вам необходимо указать название удалённого репозитория. Обычно, он называется origin и мы именно так и советуем его вам назвать.
Посмотреть все удалённые репозитории, привязанные к текущему можно с помощью команды
git pushУдалённый репозиторий привязан к локальному, но чтобы в удалённом появились ваши изменения (собственно, написанная нами программа) этого недостаточно. Необходимо сообщить git-у, что мы хотим синхронизировать изменения.
Для синхронизации изменений в git-е есть две команды: git pull и git push .
Перед синхронизацией ещё один нюанс: git синхронизирует ветки (что это такое — читайте в доп. материалах). Мы уже затрагивали понятие ветки master — главной ветки нашего локального репозитория. Удалённый репозиторий ничем не хуже. У него тоже есть свой master .
Именно с ним мы и будем синхронизировать нашу локальную ветку master .
Всё, мы, наконец, синхронизировали на код с удалённым репозиторием. Можно зайти на github и посмотреть на наш проект:
git pullТеперь давайте прямо на сайте github.com добавим в нашу программу файл README.txt . Для этого в интерфейсе github-а создайте в корне проекта новый файл и напишите там описание нашей программы.
Чтобы эти изменения попали в удалённый репозиторий, также необходимо сделать комит. Github сделает его за вас, просто укажите сообщение «Добавили README.txt».
Теперь, чтобы получить этот файл в локальном репозитории, наберите команду
RubyMine увидит файл README.txt в вашем проекте. Вы также можете убедиться, что комит на месте с помощью команды git log .
Вот с помощью этих двух команд ( git pull и git push ) и происходит обычно процесс работы с вашим удалённым репозиторием. Вы добавляете какие-то изменения, делаете комит ( git commit ), потом смотрите, не появилось ли чего нового в удалённом репозитории ( git pull ), и загружаете ваши комиты на удалённый сервер ( git push ).
В процессе обучения на нашем курсе в вашем аккаунте не github-е наберётся много прикольных программ: это будет ваше некое портфолио, которые вы потом сможете показать работодателю.
Наличие профиля на гитхабе с репозиториями, пусть даже очень простых прогамм, но аккуратно сделанными и красиво оформленными — очень серьезный плюс при приеме на работу программиста.
Поздравляем! Вы теперь умеете загружать ваши программы на сервис хранения github.com.
А в следующем уроке мы углубимся в понимании работы компьютера и узнаем, как он расходует память для наших программ.