Инструментальные средства управления версиями

Инструментальные средства управления версиями

Учебно-методические материалы «Инструментальные средства управления версиями» представляют собой методические указания к лабораторной работе по дисциплинам «Технологии разработки программного обеспечения» (по направлению магистерской подготовки) и «Технологии проектирования» (по направлению инженерной подготовки).

Цель работы:

Изучить базовые возможности систем управления версиями с применением CASE средств.

В материалах рассмотрены принципы управления версиями. Приведены инструкции по работе с версиями программ в среде управления версиями Git. Рассмотрены примеры использования указанных средств. В заключительной части методических указаний приведены контрольные вопросы, список рекомендуемой литературы и пример задания.

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

Оглавление

Теоретическая часть................................................................................................................................. 2

Руководство по системе управления версиями - Git.................................................................. 2

Последовательность работ с локальным репозиторием............................................................. 3

Создание хранилища (GIT GUI)................................................................................................... 3

Фиксация изменений (commiting)................................................................................................ 5

Ветвление (branching).................................................................................................................... 8

Слияние (merging)........................................................................................................................ 11

Просмотр истории........................................................................................................................ 13

Отмена изменений (revert или reset).......................................................................................... 15

Публикация изменений (pushing) на удалённом сервере........................................................ 16

Получение изменений (pulling) с удалённого сервера............................................................. 17

Последовательность работ с удаленным репозиторием.......................................................... 20

Задание к выполнению......................................................................................................................... 22

Контрольные вопросы.......................................................................................................................... 23

Источники.............................................................................................................................................. 23

Теоретическая часть

Руководство по системе управления версиями - Git

Для начала, скачайте msysgit (инсталляционный пакет http://git-scm.com/download/win) и запустить его. Все настройки в инсталляторе оставляем по умолчанию, кроме представленной ниже.

Не выставляйте её в самое нижнее положение!

Инструментальные средства управления версиями - student2.ru

При прохождении шагов установочной программы, вы можете захотеть отметить опцию интеграции с Windows Explorer, когда вы совершаете правый щелчок мыши на папке.

Инструментальные средства управления версиями - student2.ru

Продолжите нажатием Next пока установка не завершится.

Теперь осталось установить Tortoise GIT. Этот пункт не является необходимым, но Tortoise GIT сильно облегчает управление системой контроля версий GIT на платформе ОС Windows.

Скачиваем Tortoise Git http://code.google.com/p/tortoisegit/wiki/Download. Инсталлируем Tortoise Git, оставив все параметры по умолчанию.

Ветвление (branching)

Теперь, давайте предположим что мы хотим начать добавлять новые возможности в нашу следующую большую версию программы. Но мы так же хотим сохранить стабильную версию в которой исправлять ошибки. Что бы сделать это мы создадим ветку (branch) для наших новый разработок. Что бы создать новую ветку в git gui выберете Branch → Create (Ветвь → Создать). Большая возможность какую я хочу добавить это возможность спросить пользователя его фамилию, поэтому я назову ветку lastname. Опции по умолчанию подходят без изменений, так что просто введите имя и щёлкните Create.

Инструментальные средства управления версиями - student2.ru

Теперь когда я в lastname ветке, я могу делать мои новые модификации:

#include <stdio.h>#include <string.h> int main(int argc, char **argv){ char first[255], last[255]; printf("Enter your first name: "); fgets(first, 255, stdin); first[strlen(first)-1] = '\0'; /* remove the newline at the end */ printf("Now enter your last name: "); gets(last); /* buffer overflow? what's that? */ printf("Hello %s %s!\n", first, last); return 0;}

Теперь я могу зафиксировать изменения. Замете что я фиксирую изменения используя другое имя. Мы рассмотрим это позже. Обычно вы всегда будете использовать одно и тоже имя для фиксаций.

Инструментальные средства управления версиями - student2.ru

Между тем, пользователь проинформировал нас что не показ запятой после прямого обращения к кому-то это серьёзная ошибка. Что бы исправить её в нашей стабильной ветке, вы сначала должны переключится назад на неё. Это достигается используя Branch → Checkout (Ветвь → Перейти).

Инструментальные средства управления версиями - student2.ru

Теперь мы можем исправить нашу большую ошибку.

Инструментальные средства управления версиями - student2.ru

Если мы выберем Repository → Visualize All Branch History (Репозиторий → Показать историю всех ветвей), мы увидим как складывается наша история.

Инструментальные средства управления версиями - student2.ru

Слияние (merging)

После напряжённой работы мы решили что наша lastname ветка достаточно стабильна, что бы влить её в master ветку. Что бы выполнить слияние, используйте Merge → Local Merge (Слияние → Локальное слияние).

Инструментальные средства управления версиями - student2.ru

Так как две разных фиксации делали два разных изменения на одной и той же линии, происходит конфликт (conflict).

Инструментальные средства управления версиями - student2.ru

Инструментальные средства управления версиями - student2.ru

Конфликт может быть разрешён используя любой текстовый редактор (оставляете в тексте только нужный вариант).

После разрешения конфликта, подготовьте изменения щёлкнув на иконке файла и зафиксируйте слияние щёлкнув по Commit кнопке: в редакторе внести изменения в файл и сохранить его - Перечитать — Подготовить - Сохранить.

Инструментальные средства управления версиями - student2.ru

Просмотр истории

Файл main.c становится немного большим, поэтому я решил вынести код, спрашивающий имя пользователя в отдельную функцию. Пока я это делал, я решил вынести функцию в отдельный файл. Хранилище теперь содержит файлы main.c, askname.c, и askname.h.

/* main.c */#include <stdio.h> #include "askname.h" int main(int argc, char **argv){ char first[255], last[255]; askname(first, last); printf("Hello, %s %s!\n", first, last); return 0;} /* askname.c */#include <stdio.h>#include <string.h> void askname(char *first, char *last){ printf("Enter your first name: "); fgets(first, 255, stdin); first[strlen(first)-1] = '\0'; /* remove the newline at the end */ printf("Now enter your last name: "); gets(last); /* buffer overflow? what's that? */} /* askname.h */void askname(char *first, char *last); Файлы создают в редакторе. Затем перечитать репозиторий, подготовить все и сохранить.

Инструментальные средства управления версиями - student2.ru

История хранилища может быть просмотрена и изучена выбрав Repository → Visualize All Branch History. На следующем скриншоте я пытаюсь найти в какой фиксации была добавлена last переменная, ища все фиксации в которых было добавлено или убрано слово last.

Фиксации, которые подходят под условия поиска отмечены жирным шрифтом, что бы быстро и легко обнаружить нужную фиксацию. Можно посмотреть старую и новую версии. Цветом выделены изменения.

Инструментальные средства управления версиями - student2.ru

Через пару дней, кто-то просматривая наш код увидел что gets функция может вызвать переполнение буфера. Будучи любителем показывать пальцем, этот человек решает запустить git blame что бы увидеть кто последний раз редактировал эту линию кода. Проблема в том что Боб, тот кто зафиксировал эту линию в хранилище, а я последний кто трогал её когда я переместил строку в другой файл. Очевидно, я не виноват (конечно же). Но так ли умен git что бы обнаружить это? Да, это так.

Что бы запустить blame, выберете Repository → Browse master's Files (Репозиторий → Показать файлы ветви master). Из дерева, которое появится, дважды щёлкните на файле с интересующей строкой, который в данном случае askname.c. Наведённая мышка на интересующую линию показывает нам подсказку, которая говорит нам всё что нам надо знать.

Инструментальные средства управления версиями - student2.ru

Здесь мы можем видеть что эта линия была зафиксирована Бобом в фиксации f6c0, а затем я её переместил в её новое месторасположение в фиксации b312.

Задание к выполнению

Задание по управлению версиями:

1Если система контоля версий Git не установлена, то установить ее (параметры оставить по умолчанию).

2Запустить Git GUI или TortoiseGit (или консоль). Создать новый репозиторий (в папке по фамилии студента).

3Добавить в папку репозитория файлы. Зафиксировать состояние репозитория (выполнить commit).

4Внести изменения в файлы. Зафиксировать новое состояние репозитория.

5Создать новую ветку 1. Внести в нее изменения (добавить новый файл и изменить существующий файл: добавить, удалить и изменить строки) и зафиксировать их.

6Переключиться на ветку мастера. Внести в нее изменения (добавить новый файл; изменить существующие файлы: добавить, удалить и изменить строки первоначального файла) и зафиксировать их.

7Продемонстрировать слияние веток. Разрешить возникший конфликт.

8Просмотреть дерево изменений веток (историю).

9Продемонстрировать откат изменений в ветке 1.

10Создать удаленный репозиторий (на github.com или в сети).

11Отправить данные на удаленный репозиторий (выполняется одним из студентов подгруппы).Добавить к удаленному репозиторию участников проекта.

12Получить данные из удаленного репозитория (выполняется прочими студентами).

13Изменить полученные данные.

14Зафиксировать изменения и отправить их на удаленный репозиторий (выполняется всеми студентами подгруппы).

15Получить данные из удаленного репозитория.

16Просмотреть историю изменений.

Дополнительно:

1. Продемонстрировать работу revert и reset.

2. Продемонстрировать сохранение изменений в stash с последующим восстановлением.

3. Продемонстрировать создание и применение серии патчей.

4. Продемонстрировать создание и применение тегов.

5. Продемонстрировать rebase.

Отчет:

После выполнения работы составляется отчет, который содержит:

l титульный лист,

l описание исходных требований,

l выполняемые команды и скриншоты результатов для Git.

Контрольные вопросы

1. Что такое система управления версиями?

2. Как создать репозиторий?

3. Как создать ветку?

4. Как провести слияние? Как разрешить конфликт и что это такое?

5. Как зафиксировать изменения?

6. Как провести откат? Различия в reset и revert, мягкий и жесткий reset.

7. Какова последовательность действий при работе с локальным репозиторием?

8. Какова последовательность действий при работе с удаленным репозиторием?

9. Каковы возможности при работе с удаленным репозиторием? Как его клонировать, получать и отправлять данные?

Источники

· Система управления версиями Git:

· Дистрибутив выдается преподавателем или скачивается из интернета.

· Основной материал — методичка по использованию Windows-клиента Git-Gui

· Теория — методичка по командам Git

· Дополнительно - Краткое руководство по использованию Windows-клиента Git-Gui http://tutorials.assembla.com/git-guide-for-windows-users/tour.ru.html

· Дополнительно - Руководство по использованию ее аналога Git Extensions http://www.rsdn.ru/article/tools/Git.xml

· Дополнительно - Краткое руководство по командам Git http://www.calculate-linux.ru/main/ru/git

· Дополнительно - Подробное руководство по командам Git http://marklodato.github.io/visual-git-guide/index-ru.html

Инструментальные средства управления версиями

Учебно-методические материалы «Инструментальные средства управления версиями» представляют собой методические указания к лабораторной работе по дисциплинам «Технологии разработки программного обеспечения» (по направлению магистерской подготовки) и «Технологии проектирования» (по направлению инженерной подготовки).

Цель работы:

Изучить базовые возможности систем управления версиями с применением CASE средств.

В материалах рассмотрены принципы управления версиями. Приведены инструкции по работе с версиями программ в среде управления версиями Git. Рассмотрены примеры использования указанных средств. В заключительной части методических указаний приведены контрольные вопросы, список рекомендуемой литературы и пример задания.

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

Оглавление

Теоретическая часть................................................................................................................................. 2

Руководство по системе управления версиями - Git.................................................................. 2

Последовательность работ с локальным репозиторием............................................................. 3

Создание хранилища (GIT GUI)................................................................................................... 3

Фиксация изменений (commiting)................................................................................................ 5

Ветвление (branching).................................................................................................................... 8

Слияние (merging)........................................................................................................................ 11

Просмотр истории........................................................................................................................ 13

Отмена изменений (revert или reset).......................................................................................... 15

Публикация изменений (pushing) на удалённом сервере........................................................ 16

Получение изменений (pulling) с удалённого сервера............................................................. 17

Последовательность работ с удаленным репозиторием.......................................................... 20

Задание к выполнению......................................................................................................................... 22

Контрольные вопросы.......................................................................................................................... 23

Источники.............................................................................................................................................. 23

Теоретическая часть

Наши рекомендации