«Собор или базар»: системы контроля версий — централизованные или распределенные?
1. «Собор или базар»: системы контроля
версий — централизованные или
распределенные?
Стас Фомин, stas@custis.ru
Заказные ИнформСистемы
29 октября 2009 г.
1 / 86
2. Version Control System/Revision Control System
ПО для работы с изменяемыми
информационными объектами:
хранение версий программных артефактов:
программных кодов;
документов и документации в целом;
моделей САПР.
мгновенный доступ к любой версии;
обеспечение совместной работы команды.
2 / 86
4. Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
4 / 86
5. Однопользовательские
1 создать проект Computer
Created by Andrew Fitzsimon
2 запись изменений
3 просмотр истории
4 выпуск версий
5 / 86
6. Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
6 / 86
7. Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны!
7 / 86
8. Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны! Централизованные (СVCS) Распределенные (DVCS)
8 / 86
9. Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны! Централизованные (СVCS) Распределенные (DVCS)
Наша тема!
9 / 86
10. Миниглоссарий СУВ
repository Хранилище документов — место, где система
управления версиями хранит все документы вместе с
историей их изменения и другой служебной
информацией.
revision Версия документа. СУВ различают версии по
номерам/меткам, которые назначаются
автоматически.
workspace Рабочая/локальная копия документов (working copy ).
10 / 86
17. Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Workspace 1: c:projectssupercode
Workspace 2: c:projectsbugfixes
Workspace 3: c:projectsexperimental
Репозиторий
Рабочая станция «B» (Linux)
Repository
Workspace 4: /usr/share/supercode
Workspace 5: /usr/share/test-supercode
Рабочая станция «C» (Mac OS)
Workspace 6
17 / 86
18. Базовые операции CVCS
checkout Извлечение данных из хранилища и
создание рабочей копии. Возможно заказать
определенные версий.
update Обновление рабочей копии из
репозитория. Можно переключится на другие
версии.
commit Создание новой версии, публикация
изменений. Распространение изменений, сделанных
в рабочей копии, на репозиторий. В хранилище создаётся
новая версия. 18 / 86
19. Централизованные системы
Привычная всем схема!
Computer
Created by Andrew Fitzsimon
2 update
1 checkout
Computer
Created by Andrew Fitzsimon
Server 3 commit
19 / 86
21. Ветки и метки
branch Ветки — параллельные процессы эволюции кода.
Одинаковая историю до точки ветвления и разная —
после неё. Например, удобно держать отдельные
ветки для учета багов в выпущенных версиях или
проверки экспериментальных идей. Сливают ветки
между собой, или с основным стволом разработки.
tag Метка — символическое имя для версии.
Замороженная ветка.
Branches 6 9 11 15 16
Merges
2 3 7 8 Discontinued
development branch
1 4 10 12 14
Trunks
5 Tags 13
21 / 86
22. Базовые операции DVCS
Принцип Хоттабыча — каждому по репозиторию!
commit Фиксация новой версии в своем репозитарии.
pull Загрузка изменений от кого-то в отдельную ветку.
push Передача изменений кому-то в отдельную ветку.
merge Слияние изменений из двух веток.
branch Ветвление репозитория.
22 / 86
23. Распределенные системы — швейцарский нож
Можно работать в одиночку без серверов!
1 создать проект Computer
Created by Andrew Fitzsimon
2 запись изменений
3 просмотр истории
4 выпуск версий
23 / 86
24. Распределенные системы — швейцарский нож
Можно по старинке — с центральным сервером!
Computer
Created by Andrew Fitzsimon
2 update
1 checkout
Computer
Created by Andrew Fitzsimon
Server 3 commit
24 / 86
25. Распределенные системы — швейцарский нож
Можно без центрального сервера — произвольная схема обмена
изменениями!
1 запуск проект 2 клонирование-ветвление
Computer
Computer Created by Andrew Fitzsimon
Created by Andrew Fitzsimon
фиксируемые фиксируемые
3 3
правки правки
слияние слияние
4 4
изменений изменений
с товарищем с товарищем
25 / 86
26. Распределенные системы — швейцарский нож
Можно с центральным сервером, с локальными фиксациями и
ветками, и отдельной стратегией публикации и слияний.
Computer 2 pull
merge
Created by Andrew Fitzsimon
основной ствол
1 branch
Computer
Created by Andrew Fitzsimon
Server 3 commit
локальные ветки
26 / 86
27. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
27 / 86
28. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
28 / 86
29. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
29 / 86
30. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
30 / 86
31. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
31 / 86
32. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
32 / 86
33. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
33 / 86
34. История управления конфигурациями
1970 Исследования Leon Pressor (ВПК), появился «make».
1972 Bell Labs: алгоритм «diff», первая система
контроля версий «SCCS».
1980 «RCS» (Revision Control System), утилита «patch».
1986 «CVS» (Concurrent Version System), первая
распределенная СУВ.
2000 CollabNet — начало работ над «Subversion».
200x появились работоспособные распределенные СУВ:
«BitKeeper», «GNU arch».
2009 Разборки между лидерами: SVN, GIT, Mercurial.
Но еще много legacy-систем, например CVS.
34 / 86
43. Эволюция систем контроля версий
CVSNT:1998
CVCS CVS:1985
SCCS:1972 RCS:1980 SVN:2000
DVCS
43 / 86
44. Эволюция систем контроля версий
CVSNT:1998
CVCS CVS:1985
SCCS:1972 RCS:1980 SVN:2000
DVCS arch:2001-2007
Monotone:200x
44 / 86
45. Эволюция систем контроля версий
CVSNT:1998
CVS:1985
CVCS
SVN:2000
SCCS:1972 RCS:1980 arch:2001-2007
DVCS
Monotone:200x
BitKeeper:2001
45 / 86
46. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
SCCS:1972 RCS:1980 arch:2001-2007 Darcs:2003-2007
DVCS
Monotone:200x
BitKeeper:2001
46 / 86
47. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
SCCS:1972 RCS:1980 arch:2001-2007 Darcs:2003-2007
DVCS
Monotone:200x
GIT:2005
BitKeeper:2001
47 / 86
48. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
SCCS:1972 RCS:1980 arch:2001-2007 Darcs:2003-2007
DVCS
BitKeeper:2001 GIT:2005
Monotone:200x
Mercurial:2005
48 / 86
49. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
Darcs:2003-2007
SCCS:1972 RCS:1980
arch:2001-2007
DVCS
Bazaar:2005
BitKeeper:2001
GIT:2005
Monotone:200x
Mercurial:2005
49 / 86
50. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
Darcs:2003-2007
SCCS:1972 RCS:1980
arch:2001-2007
Bazaar:2005
DVCS
BitKeeper:2001
GIT:2005
Monotone:200x
Mercurial:2005
50 / 86
51. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
Darcs:2003-2007
SCCS:1972 RCS:1980
arch:2001-2007
Bazaar:2005
DVCS
BitKeeper:2001
GIT:2005
Monotone:200x
Mercurial:2005
51 / 86
52. Эволюция систем контроля версий
CVSNT:1998
CVS:1985 SVN:2000
CVCS
Darcs:2003-2007
SCCS:1972 RCS:1980
arch:2001-2007
Bazaar:2005
DVCS
BitKeeper:2001
GIT:2005
Monotone:200x
Mercurial:2005
52 / 86
53. Subversion — венец централизованных СУВ
The Forrester WaveTM : Software Change And Configuration
Management, Q2 2007 IBM Is The Unified SCCM Front-Runner,
Subversion Leads On Standalone SCM.
Risky Strong
Bets Contenders Performers Leaders
Strong
Go online to download
the Forrester Wave tool
Borland for more detailed product
Serena Dimensions Software
Subversion evaluations, feature
Perforce
comparisons, and
MKS IBM
customizable rankings.
CA Telelogic
Current
o ering AccuRev Microsoft
Serena PVCS
Market presence
Full vendor participation
Incomplete vendor participation
Weak
Weak Strategy Strong
41388 Source: Forrester Research, Inc. 53 / 86
59. Война DVCS vs. CVCS!
Линус Торвальдс:
Когда я сказал, что страстно ненавижу CVS, я должен также
сказать, что если в аудитории есть пользователи SVN, то вы,
возможно, захотите уйти. Поскольку моя ненависть к CVS
означает, что я считаю Subversion самым бесцельным проектом,
так как основной девиз Subversion некоторое время был
«Сделанный по-уму CVS» или что-то вроде этого. А если вы
начинаете с такого слогана, то вы никуда не сможете прийти. Это
так, потому что CVS невозможно сделать «правильным».
59 / 86
60. Война DVCS vs. CVCS!
Линус Торвальдс:
А сейчас я рассказываю свое единственно правильное мнение,
так что пользователи CVS, если вы действительно его так
любите, уйдите с глаз моих долой. Вам надо обратиться в
психушку или куда-то еще.
Поэтому, например, я Subversion даже трехметровым багром
трогать не буду. В Subversion большой репозиторий, куда все
обязаны складывать свои данные. А централизованная модель
просто не работает, когда. . . давайте взглянем на некоторые
такие случаи.
60 / 86
61. Война DVCS vs. CVCS!
Ben Collins-Sussman:
. . . Смотрите, что хочет сделать этот счастливчик — уползти в
пещеру, неделями в одиночку корпеть над сложной
функциональностью, а затем воткнуть «вылизанное» решение в
«основной ствол» проекта. . .
В нашем Subversion-сообществе такое поведение мы именуем
«сбрасывание бомбы» . . .
61 / 86
62. Война DVCS vs. CVCS!
Линус Торвальдс:
Ветки полностью бесполезны, если Вы не объединяете их, а CVS
не может объединить вообще ничего. Вы можете слить
изменения однажды, но тогда CVS забывает то, что вы сделали,
и вы никогда не сможете объединять снова, не получая адские
конфликты. Слияния в Subversion — полная беда. . . .
Невероятно, насколько эти люди глупы. Они все время смотрели
на проблему неверно. Проблема-то не в ветвлении, а в слиянии!
Branches 6 9 11 15 16
Merges
2 3 7 8 Discontinued
development branch
1 4 10 12 14
Trunks
5 Tags 13
62 / 86
64. Война DVCS vs. CVCS!
Ben Collins-Sussman:
Итак, есть два «класса» программистов-разработчиков, назовем
их «20%» и «80%». основная движущая сила индустрии
программного обеспечения — это «80%»-ные парни. . . . Их
знаний в точности достаточно, чтобы сделать свою работу, затем
пойти домой на выходные и забыть о компьютерах. . . .
Жуткая правда №1 — Основной объем . . . ПО — создается
вышеупомянутыми «80%» программистов.
Жуткая правда №2 — Большинство «альфа-гиков» забывают
«жуткую правду №1».
64 / 86
65. Война DVCS vs. CVCS!
Ben Collins-Sussman:
Большинство из 80% кодеров даже в TortoiseSVN обнаруживают
кучу «новых и интригующих» концепций, таких как «update» и
«commit».
Им вообще трудно использовать контроль версий, а вы
собираетесь объяснять им разницу между «pull» и «update», и
между «commit» и «push»? Собираетесь? Смотрите мне в глаза
и попробуйте еще раз повторить это c серьезной мордой лица.
65 / 86
66. Война DVCS vs. CVCS!
Линус Торвальдс:
Например, я думаю, что большинство из вас полностью
некомпетентны.
Основной принцип распределенности — это то, что я не должен
вам доверять. Я не должен давать вам доступ к коммитам. . . .
Мне нужно доверять только 5, 10, ну может 15 людям. Если у
меня есть доверенная сеть, в которую входят эти 5/10/15
выдающихся человек, и я знаю, что они выдающиеся, я могу
забирать новый код у них. И мне не надо париться на эту тему.
66 / 86
75. Плюсы DVCS
+ Работа оффлайн
+ Очень быстро коммитить
+ Очень быстро копаться в истории
+ Один пользователь/много машин
(«конфигурации»)
+ Поддержка шизофрении полифонии веток с
легкими слияниями
75 / 86
76. Минусы DVCS
− Нельзя ограничить доступ на чтение
− Нельзя работать с частью репозитория
− Большие репозитарии («начальное клонирование»)
− Нет блокировки бинарников для целостности
− «Кодовые бомбы»
− Трудно контролировать! Нет единой шкалы версий!
− Отстает интеграция с IDE, поисковыми и вебсистемами.
− Непросто с практикой Continuous Integration
76 / 86
79. Минусы СVCS
− Скорость слияний и коммитов зависит от
сети
− Невозможна работа оффлайн
− Жалко тратить общий репозиторий под
[жирную] фигню.
− Нет легких слияний!
79 / 86
80. Плюсы СVCS (SVN)
+ OK с бинарниками (блокировки).
+ Идеально для Continuous Integration
+ Максимальная известность и понятность.
+ Идеально для мониторинга, code-review,
контроля (ViewVC).
+ Матерая — интеграция со всем. Полно
ништяков!
+ SVNSearcher — полнотекстовый поиск —
база знаний!
80 / 86
81. Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.
Удовлетворит «80%» (на самом деле 99%).
«20%» гиков — разрешить использовать
DVCS, умеющую работать с SVN:
Bazaar (bzr-svn)1 ;
Mercurial
GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1
эта презентация сделана с использованием bzr-svn
81 / 86
82. Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.
Удовлетворит «80%» (на самом деле 99%).
«20%» гиков — разрешить использовать
DVCS, умеющую работать с SVN:
Bazaar (bzr-svn)1 ;
Mercurial
GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1
эта презентация сделана с использованием bzr-svn
82 / 86
83. Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.
Удовлетворит «80%» (на самом деле 99%).
«20%» гиков — разрешить использовать
DVCS, умеющую работать с SVN:
Bazaar (bzr-svn)1 ;
Mercurial
GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1
эта презентация сделана с использованием bzr-svn
83 / 86
84. Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.
Удовлетворит «80%» (на самом деле 99%).
«20%» гиков — разрешить использовать
DVCS, умеющую работать с SVN:
Bazaar (bzr-svn)1 ;
Mercurial
GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1
эта презентация сделана с использованием bzr-svn
84 / 86
85. В любом случае, посадите ваших
технологов изучать DVCS.
The time is now!
85 / 86
86. Наши переводы статей о системах
контроля версий:
lib.custis.ru/index.php/VCSs
Наши семинары по эффективной
разработке:
team.custis.ru
ВАШИ ВОПРОСЫ?
86 / 86