Система контроля версий GIT
О системе контроля версий Git
Основные понятия GIT
Построение работы с репозиториями (вариант)
Состояние файлов с точки зрения Git
Подробнее о состояниях файлов
Термины работы с файлами и репозиторием
Ветвление в Git
Ветвление подробно
Слияние
Термины ветвления
Работа с удаленными репозиториями
Команды работы с удаленными репозиториями
Совместная работа
Решение конфликтов
Командная работа подробнее
Что храним в репозитории
223.87K
Category: softwaresoftware

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

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

Гунба С.В.

2. О системе контроля версий Git

Система контроля версий — это система, записывающая изменения в
файл или набор файлов в течение времени и позволяющая вернуться
позже к определённой версии.
Git сохраняет файлы разных версий как «снимки». Если в новой версии
какой-либо файл не менялся, то сохраняется не «снимок», а ссылка
на предыдущую версию файла.

3. Основные понятия GIT

Репозиторий – база данных где хранится информация о файлах
(«снимках»),история изменений, ссылки на файлы, комментарии
и тд.
Операции над репозиториями:
1.
Создание. Создать репозиторий можно в любой папке не
находящейся под версионным конролем
2. Клонирование. Можно клонировать любой репозиторий. При
этом данные находящиеся в исходном репозитории будут
скопинованны в новый репозиторий
Все операции в GIT осуществляются с помощью команд из
командной строки. Но к счастью есть оболочки с графическим
интерфейсом, которые облегчают работу.

4. Построение работы с репозиториями (вариант)

Главный репозиторий
(Хранит релизы ПО)
Синхронизация
Репозиторий
разработчика 1
Репозиторий
разработчика 2
Репозиторий
разработчика 3
(Хранит главный репозиторий +
текущую работу разработчика 1 )
(Хранит главный репозиторий +
текущую работу разработчика 2 )
(Хранит главный репозиторий +
текущую работу разработчика 3 )
Синхронизация
Репозиторий
разработчика 1 (На ноуте)
(Хранит главный репозиторий +
текущую работу разработчика 1 )
В главный репозиторий загружается готовый
функционал, при этом в него попадают так же
«промежуточные версии ПО»

5. Состояние файлов с точки зрения Git

Файл для Git могут быть в 3 основных состояниях:
Изменен (modified),Индексирован (staged), Зафиксирован
(Сommitted).
К изменённым относятся файлы, которые поменялись, но ещё не
были зафиксированы.
Индексированый — это изменённый файл в его текущей версии,
отмеченный для включения в следующий коммит.
Зафиксированный значит, что файл уже сохранён в вашей локальной
базе.

6. Подробнее о состояниях файлов

Commit 1
File A
Committed
File A1
modified
File A1
staged
File B
Committed
File C
Committed
File С1
modified
File С1
staged
Commit 2
Commit 2
File A1
Committed
File A1
Committed
File B
Committed
File B1
Committed
File C1
Committed
File C
Committed

7. Термины работы с файлами и репозиторием

Clone – клонирование репозитория
Init – создание репозитория
Add – команда добавить файл в индекс
Commit – команда фиксации изменений в репозитории (создание
«снимка» файлов)
При Commit необходимо указывать комментарий, описывающий что
мы коммитим.

8. Ветвление в Git

C1
C2
CB1
CF1
CB1F1
CF1

9. Ветвление подробно

C1
Bug
Bug
Master
Master
Master
C2
CB1
CB1F1
F1
CF1
CF1
F1
F1

10. Слияние

Слияние бывает 2х типов:
1.
Быстрое перемещение (Fast-Forward)
2. Коммит слияния (слияние имеет более одного предка)
Быстрое перемещение-это прямое слияние с предыдущим коммитом
(коммит с одним предком). По сути просто перемещение
указателя ветки. Как правило проходит без проблем (Слияние
Mastrer и Bug).
Коммит слияния сливает изменения из разных веток. При таком
подходе могут возникать конфликты.
При конфликте Git выдает отчет (пример):
<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53:index.html

11. Термины ветвления

Head – Указатель на текущую рабочую ветку
Branch – команда создание новой ветки, но Head указывает на
старую ветку
Checkout – команда переключения ветки (перенос Head на другую
ветку)
Merge – команда слияния активной ветки (на которую указывает
Head) и другой ветки (указывается пользователем).

12. Работа с удаленными репозиториями

Главный репозиторий
(Хранит релизы ПО)
Синхронизация
Репозиторий
разработчика 1
Репозиторий
разработчика 2
Репозиторий
разработчика 3
(Хранит главный репозиторий +
текущую работу разработчика 1 )
(Хранит главный репозиторий +
текущую работу разработчика 2 )
(Хранит главный репозиторий +
текущую работу разработчика 3 )
Синхронизация
Репозиторий
разработчика 1 (На ноуте)
(Хранит главный репозиторий +
текущую работу разработчика 1 )

13. Команды работы с удаленными репозиториями

Fetch – забирает данные в локальный репозиторий,
но не сливает их с текущими наработками. Не
модифицирует то над чем сейчас работаешь.
Pull – забирает изменения из удаленной ветки и
автоматически сливает их с текущей веткой.
Push – отправка данных на сервер и автоматическое
слияние с выбранной веткой.

14. Совместная работа

Локальный
реп. Сергея
Серверный
репозиторий
Локальный
реп. Димы
Сервер К1
Сервер К1
Сервер К1
Сергей К2
Сергей К2
Дима К2
Сергей К3
Сергей К3
Дима К2
Дима К3
Дима К3
Сергей К2
Сервер К2
(Сергей К3)
Сергей К3
Дима К4
(Сервер К2 +
Дима К3)
Сервер К3
(Дима К4)

15. Решение конфликтов

При 3х стороннем слияении возможно возникновение конфликтов.
Конфликты возникают когда в одни и те же строки изменяются
разными авторами.
При возникновении конфликтов процесс слияния останавливается,
выдается предупреждение и список файлов в которых есть
конфликты.
В файлах конфликты выделяются следующим образом:
Текст файла
Описание
<<<<<<< HEAD
Дима добавил еще а Сергей тоже добавил
в ту же строку
=======
Дима добавил еще и еще
>>>>>>>
47f6294b502b59f6dfe1ac3a11f96d733428ded
6
<<<Метка начала конфликта
Версия в Head ветке
=== Разделитель
Версия в «внешней» ветке
>>> конец разделителя
После разрешения конфликта необходиом произвести коммит.

16. Командная работа подробнее

Работа с серверным репозиторием состоит из следующих шагов:
1. Локальный коммит инкремента (нового функционала)
2. Запрос изменений с сервера (Fetch)
3. Если они есть, то забираем измненния и сливаем со своей веткой
(Pull)
4. Разбираемся с конфликтами, если они есть
5. Тестируем функционал версии с результатами слияния!
6. После прохождения тестов отправляем на сервер (Pull)
7. Новый функционал в общем репозитории!!!

17. Что храним в репозитории

1.
2.
3.
4.
5.
6.
7.
Исходный код ПО
Проект ПО с относительными путями (если это возможно)
Вспомогательное ПО и библиотеки (ipserial.dll, формирователь
*.nrn, терминалы и т.д.)
Документацию (требования, протоколы обмена, тест планы)
Средства разработки (компилятор, среда разработки и тд)
Проекты DipTrace
И т.д.
English     Русский Rules