2. Развитие систем контроля
версий
1. Ручное копирование файлов
2012-02-01
2012-02-02
2012-02-03
2. Локальные системы контроля версий
Для каждого файла хранится исходное состояние и
RCS список изменений
SCCS
3. Системы контроля
версий клиент-сервер
Централизованые системы контроля версий
●CVS
●Subversion
●IBM Rational ClearCase
●MKS Integrity
●Perforce
●PVCS
●Microsoft Visual SourceSafe
●Microsoft Visual Studio Application Lifecycle Management
4. Работа с централизоваными
системами контроля версий
●Обмен файлами через центральный сервер
●История хранится на центральном сервере
●Клиентские компьютеры содержат только
последнюю версию
5. Работа с централизоваными
системами контроля версий
Контроль одновременного доступа к файлам
Блокирование файлов на запись исключает конфликты, но уменьшает
возможности одновременного редактирования
6. Работа с централизоваными
системами контроля версий
Одновременное редактирование файла
?
Приводит к конфликтам и необходимости их разрешения вручную
7. Работа с ветками в
Subversion
При слиянии веток не используется история версий
1 3 5 7
trunk
2 4 6
bug1234
Центральный сервер – слабое место
9. Почему я выбрал
Git ?
1. Кроссплатформенность
Linux Windows Mac OS X
2. Наличие удобных инструментов
10. Почему я выбрал
Git ?
3. Скорость работы
- Большая часть операций выполняется локально;
- Скорость операций высокая;
- Данные хранятся компактно (последняя версия + разница в сжатом виде;
- Эффективно работает даже с бинарными файлами.
4. Распространённость
11. Git
Контекстно-адресуемая файловая система с
интерфейсом для системы контроля версий
Хранилище ключ-значение
Подготовка к работе с Git
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
13. Жизненный цикл файлов в
Git
3 состояния файлов:
1. Сохранённый
2. Модифицированый
3. Индексированый
14. Метки
Метка – это указатель на коммит
Создание легковесной метки
git tag v1
Метка-аннотация (комментарий вводить обязательно)
git tag -a v2 -m “вторая версия”
V1
Метка с подписью
git tag -s v3 -m “третья версия”
Метки можно использовать в “git push”
git push origin v2
Отправка меток на сервер
git push origin --tags V2
15. Ветвление
SVN - медленно Git - мгновенно
В Subversion создание, слияние веток В Git вся работа с ветками
и переключение между ветками происходит локально
происходит через сеть
16. Ветвление
После нескольких коммитов ветка master (по умолчанию) указывает на
последний
HEAD
master
Коммит 1 Коммит 2 Коммит 3
состояние 1 cостояние 2 состояние 3
HEAD – указатель на ветку, в которой мы находимся
25. Ветвление
Конфликты при слиянии веток
git merge testing
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
Типы веток
Долгоживущие
master
Тематические
ticket1234
Удалённые (remote)
origin/master
origin2/testing
Удалённые ветки бывают отслеживаемыми
26. Перемещение (rebase)
HEAD
experiment
Коммит 4 Коммит 6
Коммит 1 Коммит 2 Коммит 3
Коммит 5
master HEAD
git rebase master
experiment
Коммит 1 Коммит 2 Коммит 3 Коммит 5 Коммит 4' Коммит 6'
master
При перемещении изменяется история, создаются новые коммиты
Нельзя перемещать коммиты, которые уже существуют в общем репозитории
27. Взаимодействие
Git ↔ Subversion
Git-svn -двусторонний мост, позволяет использовать Git и Subversion совместно
git svn clone http://svn.webkit.org/repository/webkit -T trunk -b branches -t tags
.
.
.
git commit
git svn rebase
git svn dcommit
Создание веток в Subversion
git svn branch testing
Полный переход на Git
git svn clone http://svn.webkit.org/repository/webkit --no-metadata
Флаг --no-metadata обрывает связь с SVN репозиторием
28. Работа с удалёнными
репозиториями
Поддерживаемые
протоколы:
ssh, git, http, https, ftp, ftps и rsync
https://github.com/github/git
http://github.com/jcnetdev/yubnub.git
git://github.com/sitaramc/gitolite.git
user@server:/path.git
/home/user/project
file:///home/user/project
29. Работа с удалёнными
репозиториями
Команда “git remote” управляет списком удалённых репозиториев.
Каждый репозиторий равноценно используется для получения и
отправки данных
pull
pu
pull
pu
sh
sh sh
pu
push
30. Распределённая работа с Git
Модель организации с центральным репозиторием
Центральный
репозиторий
Вася Петя Паша
31. Распределённая работа с Git
Модель организации с менеджером по интеграции
Открытый Открытый Открытый
Священный
репозиторий репозиторий репозиторий
репозиторий
Васи Пети Паши
Личный Личный Личный
Менеджер по
репозиторий репозиторий репозиторий
интеграции
Васи Пети Паши
32. Распределённая работа с Git
Диктатор и лейтенанты
Священный
Диктатор репозиторий
Лейтенант Лейтенант
разработчик разработчик разработчик разработчик разработчик
33. Распределённая работа с Git
Циклическая модель
Разработчик 2
Разработчик 1
Разработчик 3
Разработчик 5
Разработчик 4
34. Установка Git на сервер
Протокол Git
git clone git://server:project.git
Преимущества:
Самый быстрый протокол
Недостатки:
Отсутствие авторизации пользователей
Протокол HTTP(S)
git clone http://example.com/gitproject.git
Преимущества:
Простой в установке, используется любой web-сервер
Недостатки:
Не очень эффективен с клиентской стороны
35. Установка Git на сервер
Gitosis, Gitolite
Устанавливается на сервер, организует доступ к
репозиторию через SSH протокол используя один логин.
Доступ предоставляется с помощью открытых ключей
пользователей.
Предоставляет удобное управление открытыми ключами
пользователей.
36. Устройство репозитория Git
~/project$ git init
Initialized empty Git repository in ~/project/.git/
git add readme.txt
~/project$ git commit -am "initial rev"
[master (root-commit) 9585139] initial rev
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
~/project$ cd .git
~/project/.git$ ls -al
total 52
drwxr-xr-x 8 user user 4096 ./
drwxr-xr-x 3 user user 4096 ../
drwxr-xr-x 2 user user 4096 branches/
-rw-r--r-- 1 user user 12 COMMIT_EDITMSG
-rw-r--r-- 1 user user 92 config
-rw-r--r-- 1 user user 73 description
-rw-r--r-- 1 user user 23 HEAD
drwxr-xr-x 2 user user 4096 hooks/
-rw-r--r-- 1 user user 112 index
drwxr-xr-x 2 user user 4096 info/
drwxr-xr-x 3 user user 4096 logs/
drwxr-xr-x 7 user user 4096 objects/
drwxr-xr-x 4 user user 4096 refs/
37. Устройство репозитория Git
Весь репозиторий в папке .git/
branches/ Конфигурация
COMMIT_EDITMSG
Центральная config
часть description
репозитория HEAD
hooks/ Скрипты для
index автоматизации
info/
logs/
objects/
refs/ Список файлов
для исключения
(то же что и
.gitignore)