Скачиваний:
22
Добавлен:
17.06.2023
Размер:
3.92 Mб
Скачать

Лабораторная работа №1

Установка и настройка распределенной системы контроля версий GIT. Основные принципы работы

Теоретическое введение

Распределенная система контроля версий (СКВ) — это система, записывающая изменения в файл или набор файлов в течение времени и позволяющая вернуться позже к определённой версии. Она позволяет вернуть файлы к состоянию, в котором они были до изменений, вернуть проект к исходному состоянию, увидеть изменения, увидеть, кто последний менял что-то и вызвал проблему, кто поставил задачу и когда, и многое другое.

Git можно использовать на операционных системах Windows, Linuxи Mac. Для каждой операционной системы предназначен свой файл установки. Также учтена разрядность компьютера и для каждой ОС присутствует программа как для 32-х разрядной системы, так и для 64-х разрядной.

Примечание. GitExtentions является графической оболочкой GIT и служит для более простого и приятного восприятия информации, а также для автоматизированного набора команд из командной строки.

Основные принципы работы с GIT(GitExtentions).

Возможны следующие варианты использования GIT:

  1. СКВ GitExtentions установлена на одном компьютере, который выполняет одновременно роль клиента и роль сервера. В данном случае работает один пользователь, который ведет контроль версий своих проектов.

  2. СКВ GitExtentions установлена на нескольких компьютерах локальной (корпоративной) вычислительной сети. Один из компьютеров выполняет роль сервера, а другие роль клиентов. В данном случае может работать команда пользователей либо каждый пользователь над свои проектом, либо вместе над одним проектом.

  3. СКВ GitExtentions установлена на компьютерах, подключенных к глобальной вычислительной сети (Интернет). Они выполняют роль клиентов. На Интернет-сервере размещается серверная часть GIT, и пользователи имеют возможность работать над своими или общими проектами. (В качестве примеров предоставления таких сервисов являются GITHUB, GITLAB и т.п.)

В рассматриваемой лабораторной работе будет описана работа для первого варианта использования СКВ.

В последующих лабораторных работах будет рассмотрен второй вариант использования СКВ.

Первоначальная настройка GitExtentions

Существует установка с одним кликом GitExtensions-X.XX.XX-SetupComplete.msi, которая устанавливает Git для Windows 32bit, Kdiff3 32bit и GitExtensions, для Windows 64bit рекомендуем GitExtensions-X.XX.XX-Setup.msi. Установщик можно найти здесь https://github.com/gitextensions/gitextensions/releases/tag/v2.50.02

Поэтапно рассмотрим процесс установки для 64 битной системы (версия 2.50.02):

1. На рисунке 1 представлено начальное окно установщика, нажимаем кнопку next.

Рисунок 1 – Начально окно установщика

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

Рисунок 2 – Окно выбора пользователей

3. Выбирает папку, в которую будет размещаться программа.

4. На рисунке 3 представлено следующее окно, в котором происходит выбор параметров установки.

Рисунок 3 – Выбор параметров установки

5. В следующем окне между двумя клиентами SSH, если вы пользователь системы Windows, выбираем PuTTY, потому что он имеет лучшую интеграцию с Windows, представлено на рисунке 4.

Рисунок 4 – Окно выбора клиента

6. В следующем окне нажимаем кнопку Install.

7. Запускаем программу Git Extentions.

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

Диалог настроек можно вызвать в любое время, выбрав Settings из Tools опции меню.

Выберем язык русский для более удобной работы, также в данной лабораторной работе как инструмент слияния и сравнения будет использована программа Kdiff3 (ссылка на скачивание https://sourceforge.net/projects/kdiff3/files/).

После проверки настроек нажмем клавишу ок, представлено на рисунке 5.

Рисунок 5 – Окно проверки настроек

Теперь программа готова к работе.

Работа СКВ GitExtentions, установленная на одном компьютере.

1. В программе нажмите ссылку “Создать новый репазиторий”, обозначенную стрелкой на рисунке. Затем в появившемся диалоге введите имя каталога (путь к папке), в котором вы желаете создать новый репозиторий, и нажмите кнопку “Создать”, представлено на рисунке 6.

Рисунок 6 – Создание нового репозитория

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

2. Нажмите кнопку “Редактировать .gitignore” . В появившемся диалоге вы можете добавить свой список файлов и масок, но Git Extensions позволяет сэкономить кучу времени и предлагает добавить стандартные записи. Теперь нажмите “Сохранить”, представлено на рисунке 7.

Рисунок 7 – добавление исключений

3. Нажмите на кнопку “Коммит”. Новое открывшееся окно – это окно создания нового коммита. В верхней левой части окна находятся файлы, которые были распознаны Git как отличные от текущего рабочего коммита. В этом окне можно отменять все или часть изменений в файле, можно добавлять файлы в .gitignore или перемещать их в область индексации. В коммит попадают только файлы из этой области. В верхнем правом углу находится окно, в котором мы можем просмотреть фактические изменения, которые будут сохранены в репозитории. В нижнем правом окне нужно ввести комментарий к новому коммиту. Когда все приготовления завершены, нажмите кнопку “Зафиксировать” и назовите «Первый коммит», изменения будут сохранены в репозитории. (Рисунок 8)

Рисунок 8 – Окно коммит

4. Теперь давайте добавим в проект какой-нибудь файл и попробуем сделать ещё один коммит. Закройте окно коммита, зайдите в каталог, в котором только что создали репозиторий (в моём примере это D:\tutor\), создайте в нём файл с именем Лабораторная работа номер 1.txt, вбейте в него строчку “1234” и сохраните.

Вернитесь в программу и нажмите зафиксировать.

Прежде всего, появилась запись о предыдущем коммите. Тёмно-красная надпись [master] (1) в квадратных скобках является именем локальной ветки. Название [master] обычно используется для основной ветки проекта. Придерживаться ли этого соглашения, зависит только от вас. Красным цветом отображаются рабочие метки. Стрелочка (2) указывает на текущий репозиторий, точнее, на список, из которого этот репозиторий можно выбрать. Стрелочка (3) указывает на текущую ветку. (4) представляет собой кнопку “Зафиксировать”. При нажатии на нее появится уже знакомое окно коммита. Добавьте файл Лабораторная работа номер 1.txt в индексацию (5) (обратите внимание на окно показа изменений (6)), задайте комментарий (7) и нажмите “Зафиксировать”. Поэтапно представлено на рисунке 9.

Рисунок 9 – Добавление текстового документа

После создания нового коммита ветка [master] передвинулась на новый коммит (1). В окне Изменения (2) можно видеть файлы, которые затронул выбранный коммит, а правее (3) – и сами изменения в этих файлах. ( Рисунок 10)

Рисунок 10

5. Теперь пришло время для ветвлений. Выберите интересующий вас коммит (первый, например), вызовите контекстное меню и выберите пункт “Создать новую ветку” (4). В открывшемся диалоге введите [branch1] и жмите “Создать новую ветку”. Что же произошло? Да фактически ничего не произошло. Просто к текущему коммиту приклеилась ещё одна метка. (Рисунок 11)

Рисунок 11

Теперь выберите самый первый коммит, и создайте ещё одну ветку. Назовите её [branch2]. Смотрим содержимое текущего каталога – файл Лабораторная работа номер 1.txt исчез.

На самом деле файл никуда не исчез. Просто мы создали новую ветку от коммита, в котором этого файла ещё не было, и тут же на неё переключились. Git синхронизировал содержимое рабочего каталога с текущим коммитом, которым теперь стал наш самый первый коммит. Попробуйте переключиться на [branch1], видите, файл появился. Теперь переключитесь на [branch2] – исчез, [branch1] – появился, [branch2] – исчез. Самое интересное в этом то, что переключение веток для реальных проектов происходит примерно с такой же скоростью. (Рисунок 12)

Рисунок 12

Переключитесь на [branch1], измените (к примеру напишите в новой строке 5678) файл Лабораторная работа номер 1.txt, сохраните изменения в репозитории. Переключитесь на [branch2], создайте файл тест.txt, сделайте коммит. Переключитесь на [master], измените Лабораторная работа номер 1.txt (к примеру добавьте в новой строке abcd), сделайте ещё один коммит. Смотрим, что у нас получилось. (Рисунок 13)

Рисунок 13

Это уже похоже на дерево. Если выбрать одновременно несколько коммитов в дереве (задержав кливишу shift) (1), то в окне Изменения (2) и соседнем поле (3) можно увидеть разницу между этими коммитами. Выбирать можно более двух коммитов одновременно, от последовательности выбора результат тоже зависит. (Рисунок 14)

Рисунок 14

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

Слияние в Git выполняется не сложнее создания новых веток. Единственная вещь, которую нужно понимать – это то, что любые манипуляции делаются над текущей веткой. То есть, если вы ходить слить две ветки [master] и [branch1], то у вас есть выбор: объединить изменения в ветке [master] или объединить их в ветке [branch1]. Текущая ветка в нашем примере – [master] (1). Выделите в списке ветку, изменения из которой вы хотите внести в текущую ветку. В нашем примере это [branch2]. Вызовите контекстное меню и выберите пункт “Слить текущею ветку в” -> “branch2”. В появившемся диалоге оставьте всё как есть и жмите “Объединить”. (Рисунок 15)

Рисунок 15 – Слияние веток

Git создаст новый коммит “Merge branch ‘branch2”, а в рабочем каталоге должен появиться новый файл из ветки [branch2].

Теперь проделаем то же самое с веткой [branch1]. Помните, в обеих ветках и [master] и [branch1] мы вносили изменения в файл Лабораторная работа номер 1.txt. На этот раз при попытке слияния возникает конфликт. Git Extensions выдаст окно с предупреждением. Нажимайте “OK”. Вам будет предложено разрешить конфликт прямо сейчас. Соглашайтесь. Открывшийся диалог позволяет просмотреть неразрешённые изменения в вашей утилите слияния, которую можно задать в настройках, и разрешить конфликт. В данной работе используется для этих целей kdiff3. (В данной работе были приняты изменения из branch1)

(Рисунок 16)

Рисунок 16 – Разрешение конфликта слияния

После разрешения конфликтов Git Extensions спросит, не желаете ли вы сохранить коммит. Соглашаемся и опять попадаем в диалог коммита. Зафиксируем коммит. (Рисунок 17)

Рисунок 17 – Фиксация коммита

После всех манипуляций было создано два новых коммита, и ветка [master] переехала в самый верх. [branch1] и [branch2] остались на своих прежних местах. В рабочем каталоге имеются два файла с изменениями из всех трёх веток. В принципе, если ветки [branch1] и [branch2] больше не нужны, их можно удалить. Коммиты, к которым они привязаны, никуда теперь не денутся, так как они являются частью истории ветки [master].

Мы поступим следующим образом. Ветку [branch1] мы удалим за ненадобностью, а [branch2] передвинем в самый верх к [master].

В каждый конкретный момент времени мы работаем с одной единственной веткой, которая для нас в этот самый момент является текущей. Для удаления [branch1] он не должен быть текущим. Выберите его в дереве коммитов и вызовите контекстное меню. Выберите пункт “Удалить ветку” -> “branch1. (Рисунок 18)

Рисунок 18 – Удаление ветки branch 1

Теперь займёмся синхронизацией веток [branch2] и [master]. Для начала переключимся на [branch2]. Обратите внимание, дерево изменило свой цвет, серым показаны те участки дерева, которые никак не причастны к текущей ветке.

Выделите в списке коммит, на котором у нас находится [master] и вызовите контекстное меню. Выберите пункт “Откатить текущею ветку сюда”. В появившемся окне “Сбросить текущею папку” установите “Тип сброса”, как показано на картинке 2 рисунка 19, и нажмите “OK”. Git Extensions вынесет последнее предупреждение. Жмём “ДА”. (Рисунок 19)

Рисунок 19 – Откат ветки

Фактически, последней операцией мы жёстко переставили метку в другое место дерева коммитов. В данном случае того же самого можно было бы добиться, если бы мы просто попросили Git слить [branch2] с [master]. Так всё получилось бы даже проще. Но указанным выше способом можно не только сливать ветки, но и переставлять их в любое место дерева коммитов, где никаких других веток нет.

Всё, что мы делали до сих пор, касалось исключительно локального репозитория.