git
Александр Герасёв, ЛВК
dev-sem, 16.11.11
gq@cs.msu.su
http://lvk.cs.msu.su
История изменений
● Нужна ли история изменений?
● Кому и зачем она нужна?
● Откуда выросли современные
распределенные системы управления
исходным кодом.
● git, типовые сценарии, git magic.
Зачем и как управлять
версиями
● Архивирование
● RCS
● CVS
● SVN
● Distributed RCS
● DRCS, DCVS, DSCM(S), DCMS etc.
Линейная история
● Checkout
● Commit
Откуда берутся ветви?
● Upstream based modifications
● Devel (aka trunk, aka master), next, release
● Feature branch
Ты не один
● Централизованный сервер
● Разработчик на привязи
● Конфликты, блокировки
Нумерация версий
● Линейная история
● Ветки
● Версия файла vs. общая версия
Объединение веток
● Всё плохо
● При повторных слияниях всё еще хуже
● Нужна метаинформация
● 3-way merge
Commit often
● Это плохо?
– Нет.
● Это хорошо?
– Нет!
● Создать ветку.
– Но она никому не нужна.
Желание свободы
● Работа без сервера
● Независимая история, независимые
деревья
● Взаимодействие разработчиков
Откуда взялся git
● Ядро разрабатывалось без SCMS o_0
● Тарболы, патчи, списки рассылки
● Проприетарный bitkeeper
● Oops!
Требования к SCM
● Распределенность
● Скорость работы (ПО, пользователя)
● Компактное хранение
● Целостность
● Гибкость и “удобство работы”
Git – это ужасно
● Learning curve
● Согласованность интерфейса
● Количество операций
– 75 “high level"
– 57 “low level"
● 20 способов сделать одно и то же
Как устроен git
● git = object database + refs
● Objects
– Commit Object
– Tree Object
– Blob Object
– Tag Object
● Trust
● Refs
– Branch
– Tag
Index
● Временное хранилище для
взаимодействия с репозиторием
● Хранилище метаинформации для
ускорения работы
Workflow
● Отсутствие одного (двух, трёх)
"правильного" workflow
● 20 способов...
● gitworkflows(7)
Работа в одиночку
● git init
● git add
● git commit
● git checkout
● git log
● git show
● git diff
● git reset
● git rm
● git cp/mv
Релизы и багфиксы
● git branch
● git tag
● git cherry-pick (git cherry)
● git stash
Взаимодействие с удаленным
репозиторием
● git clone
● git pull
● Локальные и удаленные ветки
● git fetch
● git push
● Несколько удаленных репозиториев
Разработка модификаций,
основанных на upstream
версии
● merge
● rebase
● Конфликты
Разрешение конфликтов в git
● Умный git
● Стратегии объединения изменений
● mergetool
● Git не понимает смысл кода, он просто
управляет изменениями
Помогите, я всё
сломал/потерял!
● Хранение объектов
● reflog
Совместная разработка
● Политика ветвления
● Правила составления и оформления
коммитов
Переписывание истории
● git commit --amend
● git add --patch
● git cherry-pick
● git rebase -i
Кто во всём виноват?
● git revert
● git blame
● git bisect
Графические инструменты
● gitk
Низкоуровневые
инструменты
● Для использования в скриптах.
● git rev-parse
● git cat-file
Хуки
● Зачем это надо?
● Что можно сделать?
Взаимодействие с другими VCS
- Oh! Damn it! Upstream morons are using CVS!
● Import репозитория
– CVS
– SVN
– Hg(?)
● Подготовка патча или коммит
Как мы перешли на git
● В прошлой версии презентации этот
слайд назывался «Как нам перейти на git
при разработке стенда?»
Всем спасибо
● http://git-scm.com

Git