git
TRANSCRIPT
История изменений
● Нужна ли история изменений?● Кому и зачем она нужна?● Откуда выросли современные
распределенные системы управления исходным кодом.
● git, типовые сценарии, git magic.
Зачем и как управлять версиями
● Архивирование● RCS● CVS● SVN● Distributed RCS
● DRCS, DCVS, DSCM(S), DCMS etc.
Откуда берутся ветви?
● Upstream based modifications● Devel (aka trunk, aka master), next, release● Feature branch
Объединение веток
● Всё плохо● При повторных слияниях всё еще хуже● Нужна метаинформация● 3-way merge
Желание свободы
● Работа без сервера● Независимая история, независимые
деревья● Взаимодействие разработчиков
Откуда взялся 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
● Временное хранилище для взаимодействия с репозиторием
● Хранилище метаинформации для ускорения работы
Работа в одиночку
● git init● git add● git commit● git checkout● git log● git show● git diff● git reset● git rm● git cp/mv
Взаимодействие с удаленным репозиторием
● git clone● git pull● Локальные и удаленные ветки ● git fetch● git push● Несколько удаленных репозиториев
Разрешение конфликтов в git
● Умный git● Стратегии объединения изменений● mergetool● Git не понимает смысл кода, он просто
управляет изменениями
Взаимодействие с другими VCS- Oh! Damn it! Upstream morons are using CVS!
● Import репозитория– CVS– SVN– Hg(?)
● Подготовка патча или коммит
Как мы перешли на git
● В прошлой версии презентации этот слайд назывался «Как нам перейти на git при разработке стенда?»