git

31
git Александр Герасёв, ЛВК dev-sem, 16.11.11 [email protected] http://lvk.cs.msu.su

Upload: alexander-gerasiov

Post on 16-Jul-2015

44 views

Category:

Documents


1 download

TRANSCRIPT

git

Александр Герасёв, ЛВКdev-sem, [email protected]://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