Система управления версиями Git. Система управления версиями git и российский сервис хранения исходного кода gitflic
Скачать 3.56 Mb.
|
Кафедра информационных систем А.А. Булычев СИСТЕМА УПРАВЛЕНИЯ ВЕРСИЯМИ GIT И РОССИЙСКИЙ СЕРВИС ХРАНЕНИЯ ИСХОДНОГО КОДА GITFLIC УЧЕБНОЕ ПОСОБИЕ Москва 2022 2 УДК 004.3(075.8) ББК 32.973.2я73 Б90 Рецензенты: Дерябин С.А. – исполнительный директор ООО «Ресолют Образование»; Зайцев С.А. – канд. техн. наук, доцент, декан факультета информационных технологий Московского университета им. С.Ю. Витте Булычев А.А. Система управления версиями GIT и российский сервис хранения исходного кода GitFlic: учеб. пособие / А.А. Булычев; Моск. ун-т им. С.Ю. Витте; каф. ИС [Электронное издание]. ‒ Москва: изд. ЧОУВО «МУ им. С.Ю. Витте», 2022. – 2,3 Мб. Эффективное управление программным проектом, выполняемым коман- дой программистов, немыслимо без использования системы управления верси- ями. В учебном пособии рассмотрены общие принципы построения систем управления версиями, подробно описана внутренняя организация одной из по- пулярных систем: GIT. Показана возможность использования репозитория GitFlic в учебном процессе для подготовки программистов. Издание предназначено для студентов всех форм обучения ИТ-направле- ний подготовки в соответствии с требованиями Федеральных государственных образовательных стандартов. Может быть использовано аспирантами, препо- давателями вузов, руководителями организаций, менеджерами всех уровней управления и практикующими разработчиками программного обеспечения. Рекомендовано к изданию решением Научно-методического совета МУ им. С.Ю. Витте № 4 от 03 ноября 2022 г. ISBN 978-5-9580-0635-9 © Булычев А.А., 2022 © ЧОУВО «МУ им. С.Ю. Витте», 2022 Б90 3 ОГЛАВЛЕНИЕ ВВЕДЕНИЕ .......................................................................................................................... 6 1. ИСТОРИЯ РАЗВИТИЯ СИСТЕМ УПРАВЛЕНИЯ ВЕРСИЯМИ ............................. 8 1.1. Назначение систем управления версиями .............................................................. 8 1.2. Краткая история развития систем управления версиями ................................... 11 1.3. Системы управления версиями первого поколения............................................ 12 1.4. Системы управления версиями второго поколения ............................................ 16 1.5. Системы управления версиями третьего поколения .......................................... 20 1.6. Встроенные системы управления версиями ........................................................ 25 2. СИСТЕМА УПРАВЛЕНИЯ ВЕРСИЯМИ GIT ........................................................... 29 2.1. Особенности и преимущества Git ......................................................................... 29 2.2. Установка и настройка Git для Windows ............................................................. 30 2.3. Основные понятия .................................................................................................. 31 2.4. Настройка Git, команда git config ......................................................................... 32 2.5. Создание локального репозитория, команда git init............................................ 33 2.6. Логическая структура Git ...................................................................................... 34 2.7. Состояния файлов, команда git status ................................................................... 35 2.8. Объекты Git ............................................................................................................. 37 2.9. Добавление файла в индекс, команда git add ....................................................... 39 2.10. Создание коммита, команда git commit .............................................................. 44 2.11. Технология использования веток........................................................................ 50 2.12. Создание ветки...................................................................................................... 53 2.13. Команда git stash ................................................................................................... 56 2.14. Просмотр истории коммитов .............................................................................. 58 2.15. Сравнение версий файлов, команды git diff, git show ....................................... 60 2.16. Удаление файлов, команда git rm ....................................................................... 65 2.17. Восстановление файлов, команда git restore ...................................................... 66 2.18. Перемещение указателя HEAD, команда git checkout (продолжение) ........... 67 2.19. Удаление и объединение коммитов, команда git reset ...................................... 70 2.19.1. Редактирование последнего коммита .......................................................... 71 2.19.2. Удаление последних коммитов .................................................................... 72 2.19.3. Объединение коммитов ................................................................................ 73 2.19.4. Отмена действия команды git reset .............................................................. 73 2.20. Удаление веток ..................................................................................................... 73 2.21. Слияние веток, принципы выполнения операции ............................................. 74 2.22. Слияние веток, команда git merge ....................................................................... 77 2.22.1. Устранение конфликтов слияния ................................................................. 78 4 2.23. Перенос начала ветки, команда git rebase .......................................................... 82 2.24. Копирование коммита, команда git cherry-pick ................................................. 85 2.25. Работа с внешним репозиторием ........................................................................ 87 2.25.1. Подключение внешнего репозитория, группа команд git remote ............. 87 2.25.2. Отправка изменений в удалённый репозиторий, команда git push .......... 89 2.25.3. Клонирование удалённого репозитория, команда git clone ...................... 90 2.25.4. Просмотр внешнего репозитория, команда git fetch .................................. 94 2.25.5. Получение изменений из локального репозитория, команда git pull ....... 96 3. ПРАКТИЧЕСКОЕ ИСПОЛЬЗОВАНИЕ GIT .............................................................. 98 3.1. Управление репозиторием из среды программирования ................................... 98 3.1.1. Операции с репозиторием Git в среде PyСharm ........................................... 98 3.1.1.1. Подключение локального репозитория к проекту Pycharm ..................... 98 3.1.1.2. Клонирование внешнего репозитория в проект Pycharm ......................... 99 3.1.1.3. Выполнение команд Commit и push из проекта PyCharm ...................... 101 3.1.2. Операции с репозиторием Git в среде Visual Studio .................................. 103 3.1.2.1. Клонирование репозитория ....................................................................... 103 3.1.2.2. Графическая схема репозитория ............................................................... 104 3.1.2.3. Выполнение команд Commit и push из проекта Visual Studio ............... 105 3.2. Учебный портал сайта GitFlic ............................................................................. 106 3.2.1. Вход на учебный портал GitFlic ................................................................... 107 3.2.2. Регистрация преподавателей и студентов ................................................... 108 3.2.3. Взаимодействие преподавателя и студентов .............................................. 109 3.2.4. Создание заданий .......................................................................................... 110 3.2.4.1. Создание учебного курса ........................................................................... 110 3.2.4.2. Добавление на курс преподавателей и студенческих групп .................. 110 3.2.4.3. Добавление лекций ..................................................................................... 111 3.2.4.4. Добавление задания.................................................................................... 112 3.2.4.5. Распределение заданий между студентами ............................................. 112 3.2.4.6. Создание репозитория ................................................................................ 113 3.2.4.7. Отправка задания на проверку .................................................................. 114 3.2.4.8. Проверка заданий ....................................................................................... 115 3.2.4.9. Просмотр результатов проверки ............................................................... 115 3.3. Репозиторий GitFlic .............................................................................................. 116 3.3.1. Структура окна сайта GitFlic ........................................................................ 116 3.3.2. Создание нового репозитория ...................................................................... 118 3.3.3. Управление проектом.................................................................................... 119 3.3.4. Администрирование и просмотр публичных проектов ............................. 123 3.3.4.1. Клонирование репозитория ....................................................................... 123 5 3.3.4.2. Избранное .................................................................................................... 123 3.3.4.3. Переименование проекта ........................................................................... 124 3.3.5. Видимость проекта ........................................................................................ 124 3.3.6. Передача репозитория другому владельцу ................................................. 125 3.3.7. Добавление пользователей в проект ............................................................ 125 3.3.8. Просмотр списка публичных проектов ....................................................... 125 3.3.9. Создание нового проекта и управление настройками ............................... 126 3.3.9.1. Создание проекта ........................................................................................ 126 3.3.9.2. Изменение настроек проекта ..................................................................... 127 3.3.9.3. Настройка основных веток проекта .......................................................... 128 3.3.10. Работа с аккаунтом ...................................................................................... 129 3.3.10.1. Профиль пользователя ............................................................................. 129 3.3.10.2. Настройка аккаунта .................................................................................. 130 3.3.11. Авторизация и регистрация ........................................................................ 132 3.3.12. Уведомления ................................................................................................ 133 3.3.13. Создание README для профиля............................................................... 134 3.3.14. README для организации ......................................................................... 135 3.3.15. Создание команды разработчиков ............................................................. 136 3.3.16. Создание компании ..................................................................................... 137 3.3.17. Добавление сотрудников ............................................................................ 138 ЗАКЛЮЧЕНИЕ ............................................................................................................... 140 БИБЛИОГРАФИЧЕСКИЙ СПИСОК ............................................................................ 142 6 ВВЕДЕНИЕ На каком бы алгоритмическом языке ни писалась программа, она остаётся текстом, который хранится в файле (одном или нескольких). В ходе работы над программным проектом создаются новые файлы с текстом про- грамм, удаляются и изменяются старые. До тех пор, пока проект небольшой, никаких серьёзных проблем не возникает. С ростом объёма текста и коли- чества файлов появляются проблемы, например, как вернуться к старой вер- сии текста или как одновременно заниматься сопровождением рабочей вер- сии и разработкой перспективной? Представьте себе, что программист в течение нескольких дней зани- мался решением задачи, расширяющей возможности текущего проекта, он внёс большое количество исправлений в несколько файлов. Неожиданно ока- залось, что решаемая задача больше не актуальна (из-за нехватки времени за- казчик отказался от расширения проекта), необходимо вернуться к старой вер- сии проекта. Это неприятность, а, может быть, и большая проблема. В программный продукт, уже сданный заказчику, необходимо внести изменения, при этом не отменяется задача исправления небольших погреш- ностей в этом же продукте. Разумеется, вносить изменения в эксплуатиру- ющийся код нельзя. Снова неприятность, а, может быть, проблема. Кажется, что решение проблем лежит на поверхности: создавать копии каталога с текстами программ и сохранять их в хронологическом порядке. При реализации этого подхода очень скоро возникнет ситуация, когда захочется внести изменения в файлы каталога, сохранённого три шага назад, потом в файлы каталога, сохранённого два шага назад, а потом соединить эти измене- ния. И вот уже возникла путаница. Дальше – больше… путаницы. Следующий круг проблем возникает, когда над проектом работают несколько человек. Необходимо избежать внесения изменений в чужой код и обеспечить объединение результатов работы членов команды. Программисты, столкнувшись с описанными проблемами, нашли ре- шение. Нет, не нашли, а написали. Они написали (создали) систему управ- ления версиями, которая обеспечивает: 7 − быстрый возврат к любой из прошлых версий программного про- дукта; − удобный просмотр цепочки сделанных изменений; − безопасную и эффективную коллективную работу. Настоящее учебное пособие посвящено изучению системы управле- ния версиями Git и репозитория GitFlic, включая возможность его исполь- зования в учебном процессе. Также в главе 3 приведены справочники по си- стеме GitFlic и рекомендации по использованию Git в средах программиро- вания Visual Studio и PyCharm. Учебное пособие состоит из трёх глав. В первой главе рассмотрена история развития систем управления вер- сиями с последовательным описанием этапов становления их современных реализаций. В начале главы, на примере одной из моделей жизненного цикла программного продукта, объяснено, что такое система управления версиями и почему её применение является обязательным при ведении раз- работки программ и программных комплексов различного назначения. Во второй главе подробно рассмотрена система управления версиями Git. Описаны внутренние механизмы её функционирования. Многочислен- ные примеры позволяют понять устройство и взаимосвязь структур данных, создаваемых при работе с Git. Детально рассмотрены приёмы работы с вет- вями. Третья глава посвящена описанию методики использования репозито- рия GitFlic при организации обучения студентов программированию. Рас- смотрены способы подключения к репозиторию. Описана процедура обмена данными между преподавателем и студентом в ходе выполнения учебных заданий. Подробно описан интерфейс учебного портала GitFlic. Кроме того, приведены инструкции по интеграции репозитория Git в среды программирования и использованию графического интерфейса для выполнения основных команд Git. 8 1. ИСТОРИЯ РАЗВИТИЯ СИСТЕМ УПРАВЛЕНИЯ ВЕРСИЯМИ Перед тем, как перейти к изложению истории развития систем управ- ления версиями, считаем полезным объяснить, что они собой представляют и зачем нужны. 1.1. Назначение систем управления версиями Для того чтобы понять, что такое система управления версиями и за- чем она нужна, рассмотрим модель жизненного цикла программного про- дукта, известную как V-модель. Жизненный цикл программного продукта включает 6 этапов: 1. Планирование и анализ требований. 2. Создание документации. 3. Разработка архитектуры проекта. 4. Реализация. 5. Тестирование. 6. Развёртывание и сопровождение. Модель жизненного цикла показывает последовательность реализа- ции названных этапов и взаимосвязи между ними. Схема V-модели пред- ставлена на рисунке 1.1. Модель основана на объединении стадий разра- ботки с соответствующими стадиями тестирования. Следующая фаза разра- ботки начинается только после завершения предыдущей. Каждый этап раз- работки напрямую связан с соответствующим этапом тестирования. В левой части диаграммы расположены этапы проектирования, в правой части – этапы тестирования. На этапах проектирования выполняются следующие работы: − планирование и анализ требований – сбор информации о проекте, требованиях заказчика; − создание документации – согласованные требования заказчика оформляются в виде договора, составляется рабочая документация проекта; 9 − разработка архитектуры проекта на системном уровне – определя- ется состав базовых модулей проекта, выбираются или разрабатываются ма- тематические модели и алгоритмы; − детализированная разработка проекта – проект разбивается на мо- дули, составляются требования, предъявляемые к каждому модулю, выби- раются инструменты разработки; − кодирование – пишется программный код для реализации всех мо- дулей. Рисунок 1.1 – V-модель жизненного цикла программного продукта На этапах тестирования выполняются следующие работы: − модульное тестирование – выполняется тестирование отдельных модулей с целью устранения ошибок в программном коде; − интеграционное тестирование – совместное тестирование моду- лей, имеющих связи с целью устранения ошибок проектирования межмо- дульных интерфейсов; Планирова- ние и анализ требований Создание до- кументации Разработка архи- тектуры проекта на системном уровне Детализиро- ванная разра- ботка проекта Кодирование Модульное те- стирование Интеграцион- ное тестирование Системное и приёмочное те- стирование Эксплуатация и сопровождение 10 − системное и приёмное тестирование – полностью готовый про- граммный продукт тестируется на соответствие требованиям заказчика; − эксплуатация и сопровождение – устраняются ошибки, обнару- женные в процессе эксплуатации; по просьбе заказчика вносятся изменения, улучшающие функционал программного продукта. Такая модель жизненного цикла предполагает прототипирование. Например, для тестирования высокоуровневой архитектуры проекта необ- ходим прототип готового продукта. Под прототипом понимается функцио- нирующий программный продукт, созданный на основании промежуточной документации, возможно с частично ограниченным функционалом. В V- модели используются горизонтальные и вертикальные прототипы. Горизон- тальные прототипы применяются для прояснения неясных требований, ко- гда архитектура продукта не затрагивается. Вертикальные прототипы ис- пользуются для проверки архитектурных решений. Горизонтальные связи, присутствующие в V-модели, свидетель- ствуют о возможности возврата к предыдущим этапам разработки для уточ- нения системных требований и внесения изменений в программный код по результатам тестирования прототипов. В результате многократных измене- ний, отражающих процесс поиска оптимального решения, возникает боль- шое количество вариантов программной реализации отдельных модулей. В любой момент может возникнуть необходимость вернуться к предыдущей версии или проверить несколько альтернативных решений. Та- кой стиль разработки предполагает частое сохранение результатов, соответ- ствующих большому количеству контрольных точек, и возможность быст- рого возврата в любую из этих контрольных точек. Объём программного кода быстро растёт, всё труднее становится разобраться, что, где и почему было изменено. Возникает необходимость в специальном инструменте, позволяющем документировать ход разработки и быстро переходить от одной версии кода к другой вперёд, назад и в бок. Таким инструментом, позволяющим решать перечисленные задачи, является |