Основы системы управления версиями Git для новичков

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

В общем, под катом статья, как используя SmartGit и BitBucket можно улучшить свою жизнь начинающего разработчика.

Маленький план того, что мы будем делать:

  1. Создание репозитория на Bitbucket.
  2. Клонирование репозитория (добавление его в SmartGit).
  3. Создание комитов.
  4. Отмена изменений.
  5. Создание веток.
  6. Проталкивание веток на удаленный репозиторий (аплоад веток на удаленный сервер).
  7. Слияние веток.

Поехали. Создание репозитория очень простая задача. Мы будем для этого пользоваться BitBucket, поэтому вам нужно иметь там аккаунт. После регистрации жмем кнопку «Create» и заполняем необходимые поля:

Создание репозитория на Bitbucket очень простая задача

Поля для заполнения при создании проекта на BitbucketСклонируем репозиторий используя SmartGit. Возьмем ссылку на наш репозиторий:

Ссылка для клонирования репозитория Bitbucket

Теперь запустим SmartGit, выберем «Project» — «Clone» (или Ctrl + Alt + O) и заполним необходимые поля:

Клонирование репозитория SmartGitСистема запросит ваш логин и пароль от Bitbucket:

Ввод логина и пароля от Bitbucket

В следующем окне доступны две опции клонирования «Include Submodules» и «Fetch all Heads and Tags». Git позволяет отдельные модули приложения хранить в разных репозиториях. Если вы отметите опцию «Include Submodules» — SmartGit автоматически подгрузит все модули. Если отметить опцию «Fetch all Heads and Tags», то SmartGit после создания папки проекта скачает все ветки и теги для данного репозитория:

Опции клонирования репозитория SmartGit

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

Локальная папка для клонирования репозитория в SmartGitСледующее окно — имя проекта в SmartGit:

Название проекта в SmartGitЕсли вы клонировали пустой репозиторий (как в этой статье), то увидите следующее окно:

Окно SmartGit после клонирование пустого репозиторияИдем дальше. Создадим комит. Что такое комит? Это фиксация изменений. Каждый комит «запоминает» что именно вы изменили и в любой момент времени можно вернуть прежнее состояние файлов. Советую вам после каждого значимого изменения, например, исправление бага в функции, делать комит. Что бы создать комит, нужно что-то изменить в проекте. Добавьте парочку файлов в папку с проектом:

Файлы в корневой директории проектаТеперь можно увидеть изменения нашего проекта в SmartGit:

Изменение в проекте SmartGit

Выберем оба файла и нажмем сначала «Stage», а потом «Commit». Зачем нужно нажимать «Stage»? Кнопка «Stage» добавляет в текущий индекс выбранные файлы. Если вы хотите создать комит для двух файлов, а изменили, предположим целых 5, достаточно выбрать эти два файла, нажать «Stage», что добавит их в индекс, а после «Commit». Таким образом только выбранные два файла попадут в комит.

Создание комита SmartGit

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

Окно комита в SmartGit

После чего следует нажать кнопку «Commit». Кнопка «Commit & Push» делает тоже самое, но еще и  проталкивает (заливает) изменения в удаленный репозиторий (в нашей случае это Bitbucket). Пока не стоит этого делать. Проталкиванием мы займемся далее. Внизу, в списке веток, появится локальная ветка «master». Это основная ветка кода приложения. Что такое ветки, расскажу чуть позже. А сейчас сделаем что-нибудь с нашим проектом, а потом откатим изменения. Я удалю файл readme.txt, отредактирую файл index.php и добавлю новый файл confic.cfg:

Еще один комит в SmartGit

А теперь откатим изменение после комита. Зайдем в Log:

Лог в SmartGit

 Выберем комит, к которому хотим откатиться и нажмем «Reset»:

Откат изменений (reset) в SmartGitВ следующем окне нам предлагают выбрать какой именно «Reset» мы хотим сделать:

SmartGit разные виды reset (soft, mixed, hard)Объясню. Вспомните, что при создании комита, вы сначала добавляете файлы в индекс (stage). Это позволяет закомитить только проиндексированные файлы. Soft reset сбрасывает только комиты. Индекс и физические изменения в файлах остаются. Mixed reset работает так же, как и софт, но еще удаляет индекс файлов. Hard reset удаляет комиты, индекс и физические изменения в файлах. Аккуратно используйте hard reset, что бы нечаянно не удалить лишнего.

Я сделал hard reset для наглядности:

Последствия hard reset в SmartGit

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

Теперь немного о создании веток. Зачем они вообще нужны? Ветка позволяет сохранить текущее состояние кода, и экспериментировать. Например, вы пишите новый модуль. Логично делать это в отдельной ветке. Звонит начальство и говорит, что в проекте баг и срочно нужно пофиксить, а у вас модуль не дописан. Как же заливать нерабочие файлы? Просто переключитесь на рабочую ветку без модуля, пофиксите баг и заливайте файлы на сервер. А когда «опасность» миновала — продолжите работу над модулем. И это один из многих примеров пользы веток.

Попробуем создать свою ветку. У нас уже одна есть, это master. Она создается автоматически (если отсутствует) когда вы делаете первый комит. Создадим еще одну ветку и назовем ее «new_future1». Нажмите F7 или правым кликом внизу во вкладке «Branches» на надпись «Local Branches» и в выпадающем списке выберите «Add branch»:

Добавление новой ветки SmartGit

Нажмите «Add branch & Switch» что бы сразу переключиться на созданную ветку. Теперь вы можете создавать новые комиты, изменять файлы и не беспокоиться. Так как у вас всегда есть ветка мастер, в которую можно вернуться. Когда вы переключаете ветку, Git меняет локальные файлы на те, которые есть в этой ветке. То есть, если вы создадите новую ветку поменяете что-то в файле index.php, а потом переключитесь на ветку master то все изменения, произведенные вами будут удалены. Если же переключиться обратно в созданную ветку — изменения вернутся.

До сих пор мы работали локально. Попробуем залить труды нашей работы на сервер. Создадим какой-нибудь комит в ветке new_future1.  В случае если репозитарий пуст, а он пуст, так как мы создали его некоторое время назад и на сервер ничего не залили, Bitbucket основной назначает ту ветку, которую залили первой. Поэтому переключимся на ветку «master» и нажмем кнопку «Push»:

SmartGit переключение ветки кода

Кнопка Push SmartGIt

Выбор веток для проталкивания (аплоада на сервер) SmartGit

 

Дальше SmartGit спросит настроить ли отслеживание ветки (cofigure tracking). Отслеживание позволяет автоматически обновлять соответствующие ветки, когда вы скачиваете или загружаете обновления кода. Поэтому смело жмите «Configure»:

Конфигурирование отслеживания веток SmartGitТеперь переключитесь на другую ветку и проделайте тоже самое. Зайдем на Bitbucket и посмотрим, что изменилось в разделе «Commits»:

Комиты ветки master в Bitbucket

Комиты ветки new_future1 в BitbucketКак видите все попало на удаленный сервер.

Теперь сольем ветки. Зачем это нужно? Возьмем тот же пример с модулем. Рано или поздно вы допишите его и вам нужно будет добавить код модуля в основной код приложения. Достаточно просто слить ветки. Для этого переключитесь на ветку, в которую хотите слить код. В нашем случае это мастер. После чего нажмите правым кликом на ветку, с которой хотите слить код и выберите «Merge»:

Сливаем ветки в SmartGit

 

Дальше SmartGit спросит каким именно образом нужно слить ветки. Выберите «Create Merge-Commit».

Создание Merge-Commit в SmartGit

 

А теперь осталось протолкнуть изменения ветки master на сервер. Заливаем изменение на сервер так же, как мы делали это раньше и получаем:

Слитая ветка в BitbucketВот и все на этот раз. Из-за картинок статья вышла большой. Задавайте свои ответы. Пишите вопросы.

 

Комментарии 3

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *