Главная страница

Система контроля версий


Скачать 2.6 Mb.
НазваниеСистема контроля версий
Дата04.10.2022
Размер2.6 Mb.
Формат файлаpdf
Имя файлаSUSU_SE_2016_REP_3_VCS.pdf
ТипДокументы
#712385

Системы контроля версий
Выполнил Горвиц Евгений, ВМИ-301

Что такое система контроля версий?


Система контроля версий (Version
Control System, VCS)

программное обеспечение для облегчения работы с изменяющейся информацией.

VCS позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
3/70

Для чего нужны VCS?

Хранение полной истории изменений

Описание причин всех производимых изменений

Откат изменений, если что-то пошло не так

Поиск причины и ответственного за появления ошибок в программе

Совместная работа группы над одним проектом

Возможность изменять код, не мешая работе других пользователей
4/70

История развития
5/70

Терминология VCS

Репозиторий - хранилище версий - в нем хранятся все документы вместе с историей их изменения и другой служебной информацией.

Рабочая копия - копия проекта, связанная с репозиторием
6/70

Проблема совместного изменения файлов
7/70

Способы сохранения актуальности данных

Lock-Modify-Unlock
9/70

Copy-Modify-Merge
10/70

Классификация VCS по способу сохранения актуальности данных
11/70

Классификация VCS по способу хранения данных

Централизованные VCS

Одно основное хранилище всего проекта

Каждый пользователь копирует себе необходимые ему файлы из этого репозитория, изменяет и, затем, добавляет свои изменения обратно

Subversion

CVS

TFS, VAULT

AccuRev
13/70

Децентрализованные VCS

У каждого пользователя свой вариант (возможно не один) репозитория

Присутствует возможность добавлять и забирать изменения из любого репозитория

Git

Mercurial

Bazaar
14/70

15/70

Терминология VCS 2
Метка tag именованная версия проекта
Ветка branch
«метка, имеющая историю развития»
Коммит, фиксация commit, checkin сохранение изменений в репозитории
Чекаут, извлечение checkout получение рабочей копии (без истории)
Push, pull отправка/получение изменений в/из другого репозитория cvs HEAD
svn trunk git master
Основная ветка
16/70

Иллюстрация работы с
VCS

Коммиты
 История неизменна
 Ничего не теряется
18/70

Изменения
 Хранятся не файлы целиком, а изменения
19/70

Редактирование
 Можем отменить внесенные изменения
 Можем получить любую предыдущую версию файла
20/70

Тегирование
 Любому коммиту может быть назначена метка
 Метка включает в себя номер версии и краткое описание
 Коммит легко найти по его метке
21/70

Ветвление
 Не бойтесь делать много веток
 На каждую фичу – свою ветку!
 Ветка – указатель на последовательность коммитов
22/70

Ветвление и слияние

Терминология VCS 3
Слияние merge
Объединение изменений из разных веток
Перестановка rebase
Применение изменений из одной ветки на другую
Конфликт conflict
Попытка объединить два по-разному измененных файла
24/70


Для начала представим, что вы работаете над своим проектом и уже имеете пару коммитов
25/70


А теперь Вы решили, что вы будете работать над проблемой №53 из системы отслеживания ошибок, используемой вашей компанией.

Так как проблема №53 является обособленной задачей, над которой вы собираетесь работать, мы создадим новую ветку и будем работать на ней.
26/70


Во время работы Вы делаете несколько коммитов.

Эти действия сдвигают ветку iss53 вперёд потому, что вы на неё перешли (то есть ваш HEAD указывает на неё)

Master остаётся на месте
27/70


Теперь Вы получаете звонок о том, что есть проблема, которую необходимо немедленно устранить.

Нет нужды делать исправления поверх тех изменений, которые вы уже сделали в iss53.

Всё, что вам нужно сделать, это перейти на ветку master.
28/70


Вы запустили тесты, убедились, что решение работает, и сливаете (merge) изменения назад в ветку master, чтобы включить их в продукт.
29/70


Теперь вы можете вернуться обратно к рабочей ветке для проблемы №53 и продолжить работать над ней

Допустим, вы разобрались с проблемой №53 и сделали коммит С5.

Теперь вы готовы объединить эту ветку и свой master.
Чтобы сделать это, мы сольём ветку iss53 30/70


Это слияние немного отличается от слияния, сделанного ранее для ветки hotfix. В данном случае история разработки разделилась в некоторой точке.

Так как коммит на той ветке, на которой вы находитесь, не является прямым предком для ветки, которую вы сливаете,
VCS придётся проделать кое-какую работу
31/70


VCS автоматически создаёт новый коммит, содержащий результаты слияния (при условии, что не будет конфликтов)
32/70

Основы конфликтов при слиянии

Иногда процесс слияния не идёт гладко.

Если вы изменили одну и ту же часть файла по- разному в двух ветках, которые собираетесь слить,
VCS не сможет сделать это чисто.

Например, если ваше решение проблемы №53 изменяет ту же часть файла, что и hotfix, вы получите
конфликт слияния
$ git merge iss53 Auto-merging index.html CONFLICT
(content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.
33/70


VCS приостановит процесс слияния до тех пор, пока вы не разрешите конфликт

Всё, что имеет отношение к конфликту слияния и что не было разрешено, отмечено как unmerged.
<<<<<<< HEAD:index.html
contact : email.support@github.com

=======
please contact us at support@github.com

>>>>>>> iss53:index.html

После того, как Вы устраните все конфликты, можно выполнить коммит для завершения слияния.
34/70

Merge tool
35/70

Rebase

Кроме слияния изменений
(merge), некоторые системы контроля версия позволяют выполнять перестановку
(rebase).

Rebase позволяет добиться более наглядной истории изменений

Кажется, что работа над проектом велась последовательно, хотя, на самом деле, велась параллельно.
36/70

37/70

Основы Git

План

Что такое Git?

Установка и настройка Git

Репозиторий Git

Работа с репозиторием

Работа с branch

Игнорирование файлов

Github и Bitbucket

UI для работы с git
39/70

Что такое Git

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

Первая версия появилась в 2005 г.

Разработана Линусом Торвальдсом для использования в управлении разработкой ядра Linux.
40/70

Ключевые особенности Git

Поддерживается автономная работа; локальные фиксации изменений могут быть отправлены позже.

Каждое рабочее дерево в Git содержит хранилище с полной историей проекта.

Ни одно хранилище Git не является по своей природе более важным, чем любое другое.

Скорость работы, ветвление делается быстро и легко.
41/70

Установка и настройка

Загрузить Git можно с официального сайта: http://git- scm.com/
42/70


Установка выполняется как и обычной программы.
Необходимо указать каталог для установки и некоторые параметры.
Start
43/70


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

Такими глобальными настройками являются имя пользователя и его email. Их можно установить следующими командами в консоли Git:
$ git config --global user.name “Your name"
$ git config --global user.email email@example.com

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

Репозиторий Git

Git хранит информацию в структуре данных называемой репозиторий (repository).

Репозиторий хранит:

Набор коммитов (commit objects)

Набор ссылок на коммиты (heads).

Репозиторий хранится в той же директории, что и сам проект в поддиректории .git.
45/70

Commit objects содержат:

Набор файлов, отображающий состояние проекта в текущую точку времени

Ссылки на родительские commit objects

SHA1 имя – 40 символьная строка которая уникально идентифицирует commit object.
Идентичные коммиты всегда
будут иметь одинаковое имя.
46/70

Основные команды

git init - создание репозитория

git add <имена файлов> - Добавляет файлы в индекс

git commit – выполняет коммит проиндексированных файлов в репозиторий

git status – показывает какие файлы изменились между текущей стадией и HEAD. Файлы разделяются на 3 категории: новые файлы, измененные файлы, добавленные новые файлы

git checkout - получение указанной версии файла

git push – отправка изменений в удаленный репозиторий

git fetch – получение изменений из удаленного репозитория

git clone - клонирование удаленного репозитория себе
47/70

48/70


Сначала перейдем в папку, в которой хотим создать новый репозиторий git

Воспользуемся командой git init

Появилась новая скрытая папка: .git – наш репозиторий

Кроме того, была создана ветка master
Пример: создание репозитория
49/70


Создадим в нашей папке новый файл. Пусть это будет текстовый документ SomeFile.txt с парой строк внутри.

Используем команду git status. Git сообщает нам, что появился новый файл, который пока не добавлен в индекс
Пример: добавление файлов и создание коммитов
50/70


Давайте добавим наш текстовый файл в систему контроля версий.

Прописываем git add SomeFile.txt

Если ещё раз запросить статус (git status), мы увидим, что теперь наш файл подсвечен зеленым и добавлен в индекс
51/70


Нам осталось только зафиксировать изменения, создав новый коммит.

Для этого воспользуемся командой git commit с ключом –m (добавить информационное сообщение к коммиту)

Git проинформирует нас об успешном создании нового коммита
52/70

Полезные команды

git log – показывает лог commits начиная с HEAD

git remote – показывает информацию об удаленных репозиториях, а также позволяет удалять и добавлять их

git mv – используется для перемещения или переименования файла

git rm – удаляет файл из репозитория не затрагивая рабочую копию

gitk – визуальная утилита для работы с репозиторием
53/70

Работа с ветками

Создание branch выполняется следующей командой:
git branch branch_name

Переключение веток осуществляется командой:
git checkout branch_name

Данная команда выполняет 2 функции:

Сдвинет указатель HEAD на branch_name

Перезапишет все файлы в директории на соответствующие новому HEAD
54/70

Игнорирование файлов

Далеко не все файлы проекта требуется включать в систему контроля версий:

Результаты сборки

Настройки IDE

Файлы кэша

Индивидуальные файлы пользователя

Для этого используется файл .gitignore
55/70

 .gitignore – обычный текстовый файл
 Можно использовать регулярные выражения и подстановки
 Можно вставлять комментарии
56/70

Github и Bitbucket
57/70

Github

GitHub — крупнейший веб-сервис для хостинга IT- проектов и их совместной разработки. Основан на системе контроля версий Git.

Создатели сайта называют
GitHub «социальной сетью для разработчиков»
58/70

Особенности

Сервис абсолютно бесплатен для проектов с открытым исходным кодом и предоставляет им все возможности. (для частных проектов предлагаются различные платные тарифные планы)

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

Программисты могут объединять свои репозитории — GitHub предлагает удобный интерфейс для этого и может отображать вклад каждого участника в виде дерева.

Для проектов есть личные страницы, вики-разметка и система отслеживания ошибок.

Прямо на сайте можно просмотреть файлы проектов с подсветкой синтаксиса для большинства языков программирования.
59/70

 GitHub – социальная сеть для разработчиков!
60/70

Bitbucket

Bitbucket — веб-сервис для хостинга проектов и их совместной разработки, основанный на системе контроля версий Mercurial и Git. По назначению и предлагаемым функциям аналогичен GitHub.

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

К частному (закрытому) репозиторию может иметь доступ до пяти пользователей; большее количество записей предоставляется в рамках платного обслуживания.
61/70

Пример: работа с GitHub

Давайте отправим ранее созданный репозиторий на github.

Для начала необходимо создать новый репозиторий на сайте: https://github.com/new

Заполняем имя проекта.
Заодно можем создать файлы readme и .gitignore (github предоставляет шаблоны игнор- файлов для большинства языков программирования)
62/70


Github подсказывает, какие команды необходимо использовать, чтобы отправить наши файлы на сервер:

Теперь заглянем на страницу нашего проекта:

Репозиторий успешно отправлен на удаленный сервер!
63/70


Теперь рассмотрим процесс клонирования уже существующего репозитория

Удалим наш локальный репозиторий, а затем выполним команду git clone (url репозитория можно посмотреть на его странице на сайте github)

Мы получили копию нашего репозитория и все файлы из него
64/70

UI для работы с Git

Не всем нравится использовать консольные команды

Для работы git существует множество визуальных оболочек и программ. Вот лишь некоторые из них:

Gitk

Github Desktop

TortoiseGit

Atlassian SourceTree
65/70

Gitk

Поставляется вместе с git

Простая визуальная утилита, позволяющая просматривать текущий репозиторий, историю коммитов и изменений в нем.
66/70

Github Desktop

Разработана для удобной работы с github.

Красивый интерфейс, мало возможностей

Для большинства действий всё равно придется открывать консоль :(
67/70

TortoiseGit

«Черепашка» добавляет возможность работы с git в контекстное меню проводника

Большинство функций доступны в несколько щелчков мыши

Не очень наглядна, требует больше времени на освоение
68/70

Atlassian SourceTree

Разработана создателями Bitbucket

Похожа на Github Desktop, позволяет получить доступ к большему числу возможностей git
69/70

Спасибо за внимание!
70/70


написать администратору сайта