Файлы
Справка
Телеграм чат начинающих программистов. Общаемся и помогаем друг другу
Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush
или
пойти другим путем
В этом уроке мы научимся загружать наши git-репозитории в удалённый сервис github.com, чтобы с ними можно было работать с любого компьютера и ими можно было делиться с другим разработчиками.
Представьте, что ваша программа приносит прибыль в сотни тысяч долларов, но хранится только на вашем компьютере. И этот компьютер внезапно сломался. Или утонул. Или его украли. Обидно, да?
Распределённый репозиторий решает очень много задач:
Распределённый репозиторий — это, фактически, удалённая копия вашей программы, которую вы делаете с помощью git (или другой системы контроля версий) на удалённом сервере, доступном через интернет.
После этого все, кому вы дадите доступ (в т.ч. и вы сами), смогут скачивать вашу программу, вносить в неё изменения и загружать их на удалённый сервер с помощью всё того же git. Ваша программа становится продуктом коллективного творчества автоматически, каждый разработчик (в т.ч. и вы) абсолютно равноправен.
Сайтов, предлагающих создавать с их помощью публичные репозитории довольно много. Мы сейчас остановимся на самом популярном из них github.com.
Вот так, например, выглядит страница популярного фреймворка Ruby on Rails на сервисе github.com:
Мы неоднократно бывали на похожих страницах других проектов и библиотек в базовом блоке нашего курса.
Для того, чтобы пользоваться сервисом github необходимо создать там аккаунт. Пока выбирайте бесплатный тариф. Нам он вполне подойдёт. Интерфейс github-а часто меняется, поэтому мы не приводим тут снимков экрана, чтобы вас не запутать.
Главное, на что вам нужно обратить внимание — имя вашего пользователя на github. Оно часто будет использоваться в этом уроке, так что запомните его хорошенько. Во всех командах мы будем писать вместо него
Для того, чтобы подключить ваш github-аккаунт к нашему локальному репозиторию, необходимо познакомиться с концепцией ssh.
Давайте теперь создадим новый репозиторий в папке урока rubytut2/lesson3
и добавим его в наш github аккаунт. Напишем программу, которая выбирает из колоды 52 карт произвольную.
Начнём с того, что создадим на github-е новый репозиторий. Самое главное для нас, как он будет называться: назовём его pick_a_card.
Обратите внимание, что на бесплатном тарифе вы можете создавать только публичные репозитории. Они видны всем и только такие у нас в курсе и будут. Этого нам вполне достаточно, нам пока скрывать нечего. Приватные репозитории на github-е можно создавать только за деньги. Бесплатно приватные репозитории можно создавать, например, с помощью сервиса bitbucket.org.
Давайте учиться привязывать удалённые репозитории к локальным. Для этого, как мы это делали в первом уроке, создадим локальный репозиторий:
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
Для выполнения операций отправки на свой открытый публичный репозиторий или всех операций с приватным репозиторием необходим ввод логина и пароля. Это неудобно и не всегда безопасно. Оптимальным решением является использование SSH.
Вход на любой сервер в наше время закрыт, чтобы кто попало не ходил. Как замок на подъезде. Можно входить кодом (по паролю): так вы заходите в контакт, в одноклассники, в фейсбук и на любые другие сайты. Браузер запоминает ваши данные и повторно их уже не спрашивает.
Некоторые сервера (такие, например, как github), поддерживают авторизацию по SSH. Это как ключ от подъезда: специальный файлик, который играет роль пароля, но зашифрованного, передаваемый каждый раз при входе на сервер.
Авторизация по SSH позволяет ускорить вход на сервер, ведь в современном мире все сервера постоянно общаются между собой. За рабочий день программист может заходить на github сотни раз. Не вводить же ему пароль каждый раз. Для этого используются SSH-ключи.
Чтобы это всё организовать, вам нужно создать ключ: он состоит из двух файликов: приватного и публичного. Приватный остаётся на вашем компьютере и никому его давать нельзя. Публичный отдаётся серверу, чтобы он вас мог узнать.
На github-е есть страничка, посвящённая генерации ключа, но мы, на всякий случай, приведём основные шаги здесь.
Откройте консоль git-а (в прошлом уроке мы добавили при установке её иконку на рабочий стол) и выполните команду
ssh-keygen
Программа спросит вас, где создать пару файлов ключа. По умолчанию ключ создаётся в домашней директории в папке .ssh
. Нас это устраивает: просто нажмите Enter
. А потом программа попросит нас ввести ключевую фразу для ключа: это по сути микропароль, который вы будете вводить при первом использовании ключа в течение сессии пользователя. Рекомендуем вам пока оставить это поле пустым: просто ещё раз нажмите Enter
.
В дальнейшем, для повышения безопасности при возможной утечке/копировании/переносе ключа, при генерации кодовую фразу необходимо указывать. Добавить или изменить кодовую фразу в уже существующем ключе без повторной генерации можно командой с вводом имени файла приватного ключа
ssh-keygen -p
Вуаля! Мы сгенерили ключ. Его публичная часть лежит по адресу C:\users\<username>\.ssh\id_rsa.pub
.
Откройте этот файл в любом текстовом редакторе (например, в нашем любимом Sublime) и скопируйте его содержимое.
Найдите на github раздел для добавления ключей и создайте новый ключ: вставьте в поле key то, что вы скопировали в файле id_rsa.pub
и нажмите Add Key
Проверить корректность добавления ssh-ключа можно командой
ssh -T git@github.com
Ответ "Hi username! You've successfully authenticated, but GitHub does not provide shell access." говорит о том, что теперь мы подружили github с нашим локальным пользователем через SSH.
Привязать репозиторий для работы через ssh можно командой git remote
с указанием адреса в соответствующем формате.
git remote add origin git@github.com:<username>/pick_a_card.git
Теперь для работы с репозиторием вводить логин/пароль пользователя не потребуются.
Удалённый репозиторий привязан к локальному, но чтобы в удалённом появились ваши изменения (собственно, написанная нами программа) этого недостаточно. Необходимо сообщить git-у, что мы хотим синхронизировать изменения.
Для синхронизации изменений в git-е есть две команды: git pull
и git push
.
Перед синхронизацией ещё один нюанс: git синхронизирует ветки (что это такое — читайте в доп. материалах). Мы уже затрагивали понятие ветки master
— главной ветки нашего локального репозитория. Удалённый репозиторий ничем не хуже. У него тоже есть свой master
.
Именно с ним мы и будем синхронизировать нашу локальную ветку master
.
git push -u origin master
Всё, мы, наконец, синхронизировали на код с удалённым репозиторием. Можно зайти на github и посмотреть на наш проект:
Теперь давайте прямо на сайте 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.
А в следующем уроке мы углубимся в понимании работы компьютера и узнаем, как он расходует память для наших программ.