Справка
Телеграм чат начинающих программистов. Общаемся и помогаем друг другу
Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush
или
пойти другим путем
В этом уроке вы узнаете, что такое система контроля версий, и научитесь пользоваться системой контроля версий git для хранения кода ваших программ. Мы создадим первый локальный репозиторий и научимся пользоваться простыми командами: git status
, git add
, git commit
, git checkout
.
### Что такое система контроля версий?
Наверное, не смотря на ваш небольшой опыт, вам уже знакома ситуация, когда вы поправили вашу программу и поняли, что старый функционал внезапно перестал работать. Или вы просто удалили случайно какой-то файл вашей программы и теперь вам всё писать заново. Или вы работаете над программой вдвоём и коллега случайно перезаписал свой файл поверх вашего и затёр все ваши изменения.
Чтобы избежать подобных ситуаций, программисты придумали системы контроля версий. А потом Линус Торвальдс придумал git.
Системы контроля версий позволяют хранить историю всех изменений в программе. Представьте, что у вас есть машина времени, которая может вернуть вас в любой момент вашей прожитой жизни (в будущее — нельзя). Тогда вы в любой момент можете вернуться на какой-то момент в прошлом, посмотреть, как вы там жили и, если надо переделать какие-то вещи.
Система контроля версий — это программное обеспечение, которое позволяет вам реализовать такую вот машину времени для вашего кода. Она предоставляет вам возможность сохранять состояние вашей программы по мере того, как вы её пишете, а потом возвращаться к любому из этих сохранений, подобно тому, как вы просматриваете ваши семейные архивы фотографий.
Сохранения называются комитами (от англ. слова commit, совершать).
Для установки git его необходимо скачать с сайта git-scm.com.
Как именно скачать программу вы, надеюсь, разберётесь, а во время установки обратите внимание на вот эти шаги:
Во-первых, отметьте галочку On the Desktop
, чтобы git сделал иконку на рабочем столе.
Во-вторых, на шаге интеграции git с Windows, выберите второй пункт Use Git from the Windows Command Prompt
.
Теперь, когда мы встроили наш git в командную строку Windows, можем запустить её и набрать там git --version
. И git покажет нам свою версию.
Давайте немного настроим git, указав данные разработчика. Без этого мы не сможем делать сохранения в нашей машине времени, т.к. не понятно будет, кто эти сохранения хочет сделать. Укажите git-у своё имя и email с помощь этих команд:
git config --global user.name "Name"
git config --global user.email email@email.com
Лучше всего вместо Name
указать ваши имя и фамилию латинскими буквами (транслитом), например Vadim A. Venediktov
, а в качестве email-а указать ваш персональный email.
Для каждого проекта (каждой программы) в git предполагается создавать отдельный репозиторий — хранилище, которое хранит код вашей программы и позволяет работать с изменениями, которые в него вносились за всё время работы над ней.
Давайте создадим наш первый репозиторий и положим в него какую-нибудь программу. Для этого откройте консоль и зайдите в папку второго урока:
cd c:\rubytut2\lesson2
Допустим мы хотим создать программу, которая кидает кубик, то есть произвольно выбирает число от 1 до 6. Наша программа будет называться dice (игральные кости). Для того, чтобы создать репозиторий с таким названием нам необходимо набрать в консоли
git init dice
Эта команда создаст в текущей папке папку dice
, в которой подготовит всё для хранения новой программы. Все служебные файлы она положит в папку dice\.git
(вам необходимо настроить просмотр скрытых файлов в Windows, если вы хотите посмотреть её содержимое).
Зайдём в наш репозиторий:
cd dice
И посмотрим его состояние с помощью команды git status
git status
Так как наш репозиторий пустой, мы увидим надпись nothing to commit. Давайте создадим каких-нибудь файлов. Для этого откройте нашу папку dice
в качестве проекта в RubyMine. Как открывать проекты вы уже знаете. Возможно, вам понадобится обновить структуру файлов с помощью кнопки Refresh.
После открытия проекта в RubyMine создайте новый файл dice.rb
, в котором и будет находиться наша программа «Кубики». RubyMine уже давно понял, что мы решили хранить нашу программу в git-репозитории и предлагает нам добавить туда новый файл dice.rb
.
Давайте пока откажемся. Сделаем всё руками, чтобы лучше понять процесс. Сперва напишем нашу простенькую программу в файле dice.rb
:
puts rand(6) + 1
Снова переключимся на окно консоли и снова наберём git status
:
Появилось что-то новое. git увидел наш созданный файл dice.rb
и служебную папку .idea
нашего любимого RubyMine и показывает их нам в качестве кандидатов на добавление в репозиторий.
Некоторым файлам не место в репозитории. Вы должны чётко понимать, какой из файлов (попавших в вашу рабочую папку) является частью вашей программы, а какой нет. В нашем случае всё просто: в файле dice.rb
будет непосредственно код нашей небольшой программки, а файл .idea
— служебный, его создаёт RubyMine для каждого проекта и он не содержит никакой информации о том, как программа должна работать. Его в репозиторий добавлять не нужно.
Для того, чтобы сказать git-у, что какой-то файл (или папка в нашем случае) нам не нужен, его необходимо добавить в список игнорируемых файлов. Этот список хранится в файле .gitignore
.
Создайте с помощью RubyMine в вашем проекте файл .gitignore
(внимание, обязательно с точкой). И напишите в нём одну строку
.idea
Всё, теперь git будет игнорировать эту служебную папку (убедитесь, набрав git status
) и мы можем приступать к добавлению нужных файлов в репозиторий.
Чтобы git понимал, какие файлы принадлежат проекту, их надо добавить с помощью команды git add
. Давайте для начала добавим наш файл .gitignore
(да, его тоже нужно добавлять в git).
git add .gitignore
Если после этого снова набрать git status
, то вы увидите, что файл .gitignore
выделен зелёным — это означает, что git начал за ним следить.
Добавим также и наш файл с программой: git add dice.rb
. Можно, кстати, добавить все файлы и папки, которые есть в папке (кроме тех, что указаны в .gitignore) в репозиторий, набрав
git add .
Но мы не рекомендуем так делать по крайней мере на первых порах. Добавляйте файлы аккуратно, по одному объекту.
Наконец, переходим к созданию комита: сохранения, некой ключевой точки в нашей программе. Комиты лучше всего делать, когда вы написали какой-то законченный участок вашей программы. В нашем случае, программа пока настолько проста, что мы умудрились написать её первую версию всего одной строчкой в файле dice.rb
. Давайте сделаем наш комит сейчас.
Для того, чтобы создать комит, нужно набрать git commit -m <message>
и вместо message хорошо бы написать что-то осмысленное, чтобы всем (в том числе и вам) было понятно, что собственно означает это изменения. Первый коммит в программе обычно так и называют «Initial commit» (начальный комит), так что напишем:
git commit -m "Initial commit"
После этого git сообщит нам, что изменения сохранены:
Давайте теперь внесём изменения в нашу программу: пускай она сперва спрашивает у пользователя, сколько кинуть кубиков:
puts "How many dice?" # вопрос — сколько костей бросить?
number = gets.to_i # ввод из консоли числа кубиков, преобразование к целому числу
# цикл заданное число раз повторяющий вывод случайного "броска"
number.times do
puts rand(6) + 1
end
Сохраним изменения в нашей программе с помощью коммита:
git commit -am "version 2"
Обратите внимание, что мы указали ключ -am
, а не -m
(как раньше). В такой комит попадут все изменения во всех файлах, когда-либо добавленных в репозиторий с помощью git add
. А если бы мы хотели добавить в комит только некоторые из изменившихся файлов, нам бы необходимо было сообщить git-у, какие файлы мы хотим добавить, добавив их ещё раз с помощью git add
. Но для вас это пока сложно и не нужно, так что просто пользуйтесь командой git commit -am
.
И так, у нас есть два комита и давайте посмотрим на них. Это можно сделать с помощью команды git log
, которая показывает последние изменения, вносимые в программу.
Обратите внимание, что у каждого комита есть идентификатор (на картинке выделен тёмно-жёлтым). Этот идентификатор может пригодиться, если мы захотим вернуться к какому-то состоянию в прошлом.
Чтобы вернуться к состоянию вашей программы в прошлом, вам необходимо выполнить команду
git checkout <commit_id>
Где commit_id — тот самый идентификатор, который можно посмотреть с помощью git log
.
Если вы откатитесь на комит, который назывался «Initial commit», а потом в RubyMine посмотрите, что находится в файле dice.rb
, то увидите там первую версию вашей программы. В этом и заключается мощь git-а. Теперь вы всегда можете посмотреть «как было».
А чтобы вернуться на самое последнее сохранение, наберите
git checkout master
master — это, так называемая «основная ветка» вашей программы. Подробнее про ветвление читайте по ссылка в дополнительных материалах.
А этот урок закончен. Мы научились с помощью системы контроля версий хранить наши программы и их изменения в репозиториях git.
На следующем уроке мы научимся загружать наши программы в удалённый репозиторий на сайте github.com.