Cистема управления версиями Git

1.

Cистема управления
версиями Git
Автор: Кучук Михаил Сергеевич
e-mail: [email protected]
skype: mikuka_s
БЫСТРЫЙ СТАРТ
__

2.

Что? Какой еще гит?
Git – распределенная система контроля версий. Проект появился в 2005 году
для версионирования кода ядра Linux взамен платной системы BitKeeper.
Название дано основателем проекта Торвальдсом и дословно подчеркивает
эгоизм основателя Linux - «мерзавец».
Цели Git:
• высокая скорость работы;
• поддержка нелинейной разработки (тысячи параллельных веток);
• полная децентрализация;
• оптимизация для больших проектов (объем дискового пространства и
быстродействие).

3.

Git vs Subversion: преимущества
• возможность локальной работы с
репозитарием без доступа к сети;
• хранение только изменений от
версии к версии;
• быстрое создание/переключение
веток;
• легкое слияние веток;
• расширенная работа с коммитами;
• поддержка сложных ветвлений;
• утилита TortoiseGit.
• линейная «человеческая» нумерация
версии от младшей к старшей;
• поддержка бинарных файлов;
• доступно частичное клонирование возможность выписать любой узел
SVN;
• навигация по всем узлам;
• низкий порог вхождения;
• утилита TortoiseSVN.

4.

Git vs Subversion: идеология
промежуточных коммитов
Промежуточные локальные коммиты
позволяют вести разработку линейно
Из-за отсутствия поддержки локальных
коммитов требуется создание веток
remote
master
trunk
merge
push
Основная
ветка по
умолчанию master
local
commit1
commit1
local
commit0
commit0
local
master
pull
remote
master
branch
trunk
switch
trunk
Основная
ветка по
умолчанию trunk

5.

Git vs Subversion: получение исходников
Git Clone
SVN Checkout
клонирование
подмодулей
имя сервера
имя ветви
кол-во ревизий в
истории

6.

Git vs Subversion: получение изменений
Git Pull
SVN Update
имя сервера
ветка

7.

Git vs Subversion: добавление файлов
Git Add
SVN Add
включить
игнорируемые
файлы

8.

Git vs Subversion: фиксация изменений
Git Commit
SVN Commit
отправить коммит в
новую ветвь
исправить предыдущий коммит
задать дату и автора
коммита

9.

Git vs Subversion: создание веток
Git Branch
SVN Copy
имя новой ветви
потомок – вершина ветви
потомок – выбор ветви
потомок - коммит
потомок - ревизия с тегом
переключиться на
ветвь после branch

10.

Git vs Subversion: переключение веток
Git Checkout
SVN Switch
переключить
ветвь
перейти на ревизию
с номером метки
переключиться
на коммит

11.

Git vs Subversion: просмотр истории
Git Log
SVN Log

12.

Git: обновление удаленного репозитария
Git Push синхронизирует локальные коммиты с удаленным (remote) сервером.
URL-сервера назначается воспринимаемый alias – по умолчанию имя сервера origin.
Синтаксис: git push [сервер] [ветка]
origin/master
Remote branch
push
local
commit1
local
commit0
master
Local branch

13.

Git: слияние
Git Merge – слияние нескольких ветвей. Существуют различные стратегии слияния:
resolve – трехстороннее слияние с общим
предком;
recursive - трехстороннее слияние с
построением виртуального предка для
сложных случаев resolve;
ours – слияние веток с игнорированием
истории выбранной ветки;
subtree – слияние с помещением ветки в
отдельный каталог (создание дерева
проектов);
octopus – слияние более двух веток с
двумя и более предками.
слияние с
веткой
слияние с ревизией
по номеру метки
слияние с
коммитом #
стратегия
слияния
мессага без
напряга

14.

Git: слияние
При слиянии с созданием коммита ветвь перемещается вперед с присвоением
уникального хэша, HEAD указывает на вершину.
Опции слияния:
Squash – объединить историю ветви в один коммит и поместить узел слияния до HEAD
(HEAD не меняется);
No Fast Forward (перемотка вперед) – не переносить историю ветви в основной ствол
при отсутствии в нем конфликтующих изменений, иными словами все равно
сохранить историю в отдельной ветви;
No commit – сохранить результат слияния, но не фиксировать его, позволяя внести
исправления перед коммитом;
Messages – создать сообщение о слиянии по истории указанного количества
коммитов;
Fast Forward Only – попытаться провести слияние только методом перемотки вперед
с вырождением наследованной ветви.

15.

Git: создание меток ревизии
Git Tag
Метки создаются по:
• HEAD
• Ветке
• Существующему тегу
• Номеру ревизии

16.

Git: полезности
• Git Init – создание локального репозитария
• Git Checkout – многозадачная команда (переключить/отменить)
• Git Stash – спрятать неиндексированные изменения с возможностью из
последующего восстановления
• Git Submodule – работа с внешними репозитариями (аналог svn:externals)
• Git Status – состояние репозитария: наличие новых файлов, пометки
удалено/изменено/конфликтует
• Git Fetch – синхронизация хранилища
• Gitignore – добавление по маске или конкретных файлов, не включаемых в индекс
и не отображаемых по команде Status (все исключения хранятся в файлу .gitignore в
корне репозитария)
Справка: https://git-scm.com/book/ru/v2
English     Русский Правила