Upload
stas-fomin
View
2.672
Download
7
Embed Size (px)
DESCRIPTION
«Собор или базар»: системы контроля версий — централизованные или распределенные? Слайды к одноименному докладу на SECR-2009.
Citation preview
«Собор или базар»: системы контроляверсий — централизованные или
распределенные?
Стас Фомин, [email protected]
Заказные ИнформСистемы
29 октября 2009 г.
1 / 86
Version Control System/Revision Control System
ПО для работы с изменяемымиинформационными объектами:
хранение версий программных артефактов:I программных кодов;I документов и документации в целом;I моделей САПР.
мгновенный доступ к любой версии;обеспечение совместной работы команды.
2 / 86
Классы систем управления версиями
Системы управления версиями
3 / 86
Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
4 / 86
Однопользовательские
ComputerCreated by Andrew Fitzsimonсоздать проект1
2 запись изменений
3 просмотр истории
4 выпуск версий
5 / 86
Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
6 / 86
Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны!
7 / 86
Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны! Централизованные (СVCS) Распределенные (DVCS)
8 / 86
Классы систем управления версиями
Системы управления версиями
Однопользовательские Многопользовательские
Не актуальны! Централизованные (СVCS) Распределенные (DVCS)
Наша тема!
9 / 86
Миниглоссарий СУВ
repository Хранилище документов — место, где системауправления версиями хранит все документы вместе систорией их изменения и другой служебнойинформацией.
revision Версия документа. СУВ различают версии пономерам/меткам, которые назначаютсяавтоматически.
workspace Рабочая/локальная копия документов (working copy).
10 / 86
Централизованный Repository и Workspaces
Репозиторий
Repository
11 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Репозиторий
RepositoryWorkspace 1: c:\projects\supercode
12 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Рабочая станция «B» (Linux)Репозиторий
Repository
Workspace 1: c:\projects\supercode
Workspace 4: /usr/share/supercode
13 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Рабочая станция «B» (Linux)
Репозиторий
Repository
Workspace 1: c:\projects\supercode
Workspace 4: /usr/share/supercode
Workspace 2: c:\projects\bugfixes
14 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Рабочая станция «B» (Linux)
Репозиторий
Repository
Workspace 1: c:\projects\supercode
Workspace 4: /usr/share/supercode
Workspace 2: c:\projects\bugfixes
Workspace 3: c:\projects\experimental
15 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Рабочая станция «B» (Linux)
Репозиторий
Repository
Workspace 1: c:\projects\supercode
Workspace 4: /usr/share/supercode
Workspace 2: c:\projects\bugfixes
Workspace 3: c:\projects\experimental
Workspace 5: /usr/share/test-supercode
16 / 86
Централизованный Repository и Workspaces
Рабочая станция «A» (Windows)
Рабочая станция «B» (Linux)
Рабочая станция «C» (Mac OS)
Репозиторий
Repository
Workspace 1: c:\projects\supercode
Workspace 4: /usr/share/supercode
Workspace 2: c:\projects\bugfixes
Workspace 3: c:\projects\experimental
Workspace 5: /usr/share/test-supercode
Workspace 6
17 / 86
Базовые операции CVCS
checkout Извлечение данных из хранилища исоздание рабочей копии. Возможно заказать
определенные версий.
update Обновление рабочей копии изрепозитория. Можно переключится на другие
версии.
commit Создание новой версии, публикацияизменений. Распространение изменений, сделанных
в рабочей копии, на репозиторий. В хранилище создаётся
новая версия. 18 / 86
Централизованные системыПривычная всем схема!
ComputerCreated by Andrew Fitzsimon
ComputerCreated by Andrew Fitzsimon
Server
checkout1
2 update
3 commit
19 / 86
В CVCS версии линейно растут
20 / 86
Ветки и метки
branch Ветки — параллельные процессы эволюции кода.Одинаковая историю до точки ветвления и разная —после неё. Например, удобно держать отдельныеветки для учета багов в выпущенных версиях илипроверки экспериментальных идей. Сливают веткимежду собой, или с основным стволом разработки.
tag Метка — символическое имя для версии.Замороженная ветка.
1
2 3
4
6
7 8
9 11 15 16
10 12 14
5 13Trunks
Branches
Merges
Tags
Discontinueddevelopment branch
21 / 86
Базовые операции DVCS
Принцип Хоттабыча — каждому по репозиторию!
commit Фиксация новой версии в своем репозитарии.pull Загрузка изменений от кого-то в отдельную ветку.
push Передача изменений кому-то в отдельную ветку.merge Слияние изменений из двух веток.branch Ветвление репозитория.
22 / 86
Распределенные системы — швейцарский ножМожно работать в одиночку без серверов!
ComputerCreated by Andrew Fitzsimonсоздать проект1
2 запись изменений
3 просмотр истории
4 выпуск версий
23 / 86
Распределенные системы — швейцарский ножМожно по старинке — с центральным сервером!
ComputerCreated by Andrew Fitzsimon
ComputerCreated by Andrew Fitzsimon
Server
checkout1
2 update
3 commit
24 / 86
Распределенные системы — швейцарский ножМожно без центрального сервера — произвольная схема обменаизменениями!
ComputerCreated by Andrew FitzsimonComputer
Created by Andrew Fitzsimon
клонирование-ветвление2
4слияние измененийс товарищем
1 запуск проект
3фиксируемыеправки
4слияние измененийс товарищем
3фиксируемыеправки
25 / 86
Распределенные системы — швейцарский ножМожно с центральным сервером, с локальными фиксациями иветками, и отдельной стратегией публикации и слияний.
ComputerCreated by Andrew Fitzsimon
ComputerCreated by Andrew Fitzsimon
Server
branch1
2 pullmerge
3 commit
основной ствол
локальные ветки
26 / 86
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
История управления конфигурациями
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
Эволюция систем контроля версий
SCCS:1972
35 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
36 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980 CVCS
37 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980 CVCS CVS:1985
38 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980 CVCS CVS:1985 CVSNT:1998
39 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980 CVCS CVS:1985
CVSNT:1998
SVN:2000
40 / 86
Проблемы CVS решенные в SVN
+ Каталоги+ Транзакции+ Модификации имён файлов+ Метаданные (Свойства/properties)+ Блокировки+ Эффективность клиент-серверного обмена+ Эффективность хранения двоичных файлов+ Эффективность создания ветвей и меток+ Эффективность использования памяти сервера
41 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980 CVCS CVS:1985
CVSNT:1998
SVN:2000
42 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
43 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
44 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
45 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
46 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
GIT:2005
47 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
GIT:2005
Mercurial:2005
48 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
Bazaar:2005
GIT:2005
Mercurial:2005
49 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
Bazaar:2005
GIT:2005
Mercurial:2005
50 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
Bazaar:2005
GIT:2005
Mercurial:2005
51 / 86
Эволюция систем контроля версий
SCCS:1972 RCS:1980
CVCS
DVCS
CVS:1985
CVSNT:1998
SVN:2000
arch:2001-2007
Monotone:200x
BitKeeper:2001
Darcs:2003-2007
Bazaar:2005
GIT:2005
Mercurial:2005
52 / 86
Subversion — венец централизованных СУВ
The Forrester WaveTM: Software Change And ConfigurationManagement, Q2 2007 IBM Is The Unified SCCM Front-Runner,Subversion Leads On Standalone SCM.
Source: Forrester Research, Inc.
Go online to download
the Forrester Wave tool
for more detailed product
evaluations, feature
comparisons, and
customizable rankings.
RiskysredaeLsrednetnoCsteB
StrongPerformers
StrategyWeak Strong
Currento�ering
Weak
Strong
Market presence
Full vendor participation
Incomplete vendor participation
Subversion
IBM
BorlandSoftwareSerena Dimensions
MicrosoftAccuRev
CA Telelogic
MKSPerforce
Serena PVCS
41388 53 / 86
Опрос на порталеhabrahabr.ru
26-27 октября2009
54 / 86
Опрос на порталеhabrahabr.ru
26-27 октября2009
55 / 86
Опрос на порталеhabrahabr.ru
26-27 октября2009
56 / 86
Опрос на порталеhabrahabr.ru
26-27 октября2009?
57 / 86
Война DVCS vs. CVCS!
58 / 86
Война DVCS vs. CVCS!
Линус Торвальдс:Когда я сказал, что страстно ненавижу CVS, я должен такжесказать, что если в аудитории есть пользователи SVN, то вы,возможно, захотите уйти. Поскольку моя ненависть к CVSозначает, что я считаю Subversion самым бесцельным проектом,так как основной девиз Subversion некоторое время был«Сделанный по-уму CVS» или что-то вроде этого. А если выначинаете с такого слогана, то вы никуда не сможете прийти. Этотак, потому что CVS невозможно сделать «правильным».
59 / 86
Война DVCS vs. CVCS!
Линус Торвальдс:А сейчас я рассказываю свое единственно правильное мнение,так что пользователи CVS, если вы действительно его таклюбите, уйдите с глаз моих долой. Вам надо обратиться впсихушку или куда-то еще.Поэтому, например, я Subversion даже трехметровым багромтрогать не буду. В Subversion большой репозиторий, куда всеобязаны складывать свои данные. А централизованная модельпросто не работает, когда. . . давайте взглянем на некоторыетакие случаи.
60 / 86
Война DVCS vs. CVCS!
Ben Collins-Sussman:. . . Смотрите, что хочет сделать этот счастливчик — уползти впещеру, неделями в одиночку корпеть над сложнойфункциональностью, а затем воткнуть «вылизанное» решение в«основной ствол» проекта. . .В нашем Subversion-сообществе такое поведение мы именуем«сбрасывание бомбы» . . .
61 / 86
Война DVCS vs. CVCS!
Линус Торвальдс:Ветки полностью бесполезны, если Вы не объединяете их, а CVSне может объединить вообще ничего. Вы можете слитьизменения однажды, но тогда CVS забывает то, что вы сделали,и вы никогда не сможете объединять снова, не получая адскиеконфликты. Слияния в Subversion — полная беда. . . .Невероятно, насколько эти люди глупы. Они все время смотрелина проблему неверно. Проблема-то не в ветвлении, а в слиянии!
1
2 3
4
6
7 8
9 11 15 16
10 12 14
5 13Trunks
Branches
Merges
Tags
Discontinueddevelopment branch
62 / 86
63 / 86
Война DVCS vs. CVCS!
Ben Collins-Sussman:Итак, есть два «класса» программистов-разработчиков, назовемих «20%» и «80%». основная движущая сила индустриипрограммного обеспечения — это «80%»-ные парни. . . . Ихзнаний в точности достаточно, чтобы сделать свою работу, затемпойти домой на выходные и забыть о компьютерах. . . .Жуткая правда №1 — Основной объем . . . ПО — создаетсявышеупомянутыми «80%» программистов.Жуткая правда №2 — Большинство «альфа-гиков» забывают«жуткую правду №1».
64 / 86
Война DVCS vs. CVCS!
Ben Collins-Sussman:Большинство из 80% кодеров даже в TortoiseSVN обнаруживаюткучу «новых и интригующих» концепций, таких как «update» и«commit».Им вообще трудно использовать контроль версий, а высобираетесь объяснять им разницу между «pull» и «update», имежду «commit» и «push»? Собираетесь? Смотрите мне в глазаи попробуйте еще раз повторить это c серьезной мордой лица.
65 / 86
Война DVCS vs. CVCS!
Линус Торвальдс:Например, я думаю, что большинство из вас полностьюнекомпетентны.Основной принцип распределенности — это то, что я не долженвам доверять. Я не должен давать вам доступ к коммитам. . . .Мне нужно доверять только 5, 10, ну может 15 людям. Если уменя есть доверенная сеть, в которую входят эти 5/10/15выдающихся человек, и я знаю, что они выдающиеся, я могузабирать новый код у них. И мне не надо париться на эту тему.
66 / 86
Интеграция Ядра Линукса
Линус
67 / 86
Интеграция Ядра Линукса
Линус
Лейтенант 1 (USB)pull
Лейтенант 2 (Сеть)
pull
Лейтенант 3 (Память)
pull
68 / 86
Интеграция Ядра Линукса
Линус
Лейтенант 1 (USB)pull
Лейтенант 2 (Сеть)
pull
Лейтенант 3 (Память)
pull
Доверенный 1/1pull
Доверенный 1/2
pull
Доверенный 1/3
pull
69 / 86
Интеграция Ядра Линукса
Линус
Лейтенант 1 (USB)
pull
Лейтенант 2 (Сеть)
pull
Лейтенант 3 (Память)
pull
Доверенный 1/1
pull
Доверенный 1/2pull
Доверенный 1/3
pull
Доверенный 2/1pull
Доверенный 2/2
pull
Доверенный 2/3
pull
70 / 86
Интеграция Ядра Линукса
Линус
Лейтенант 1 (USB)
pull
Лейтенант 2 (Сеть)
pull
Лейтенант 3 (Память)
pull
Доверенный 1/1
pull
Доверенный 1/2pull
Доверенный 1/3
pull
Доверенный 2/1pull
Доверенный 2/2
pull
Доверенный 2/3
pull
Доверенный 3/1pull
Доверенный 3/2
pull
Доверенный 3/3
pull
71 / 86
Интеграция Ядра Линукса
Линус
Лейтенант 1 (USB)
pull
Лейтенант 2 (Сеть)
pull
Лейтенант 3 (Память)
pull
Доверенный 1/1
pull
Доверенный 1/2pull
Доверенный 1/3
pull
Доверенный 2/1pull
Доверенный 2/2
pull
Доверенный 2/3
pull
Доверенный 3/1pull
Доверенный 3/2
pull
Доверенный 3/3
pull
72 / 86
Базар! Надо себя «продавать»!
73 / 86
Собор или Базар?
74 / 86
Плюсы DVCS
+ Работа оффлайн+ Очень быстро коммитить+ Очень быстро копаться в истории+ Один пользователь/много машин
(«конфигурации»)+ Поддержка шизофрении полифонии веток с
легкими слияниями
75 / 86
Минусы DVCS
− Нельзя ограничить доступ на чтение− Нельзя работать с частью репозитория− Большие репозитарии («начальное клонирование»)− Нет блокировки бинарников для целостности− «Кодовые бомбы»− Трудно контролировать! Нет единой шкалы версий!− Отстает интеграция с IDE, поисковыми и вебсистемами.− Непросто с практикой Continuous Integration
76 / 86
DVCS & CI — OK
77 / 86
DVCS & CI — NOT OK
78 / 86
Минусы СVCS
− Скорость слияний и коммитов зависит отсети
− Невозможна работа оффлайн− Жалко тратить общий репозиторий под
[жирную] фигню.− Нет легких слияний!
79 / 86
Плюсы СVCS (SVN)
+ OK с бинарниками (блокировки).+ Идеально для Continuous Integration+ Максимальная известность и понятность.+ Идеально для мониторинга, code-review,
контроля (ViewVC).+ Матерая — интеграция со всем. Полно
ништяков!+ SVNSearcher — полнотекстовый поиск —
база знаний!80 / 86
Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.Удовлетворит «80%» (на самом деле 99%).«20%» гиков — разрешить использоватьDVCS, умеющую работать с SVN:
I Bazaar (bzr-svn)1;I MercurialI GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1эта презентация сделана с использованием bzr-svn
81 / 86
Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.Удовлетворит «80%» (на самом деле 99%).«20%» гиков — разрешить использоватьDVCS, умеющую работать с SVN:
I Bazaar (bzr-svn)1;I MercurialI GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1эта презентация сделана с использованием bzr-svn
82 / 86
Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.Удовлетворит «80%» (на самом деле 99%).«20%» гиков — разрешить использоватьDVCS, умеющую работать с SVN:
I Bazaar (bzr-svn)1;I MercurialI GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1эта презентация сделана с использованием bzr-svn
83 / 86
Что выбрать?
Наш ответ на сегодня:
Централизованный SVN-репозиторий.Удовлетворит «80%» (на самом деле 99%).«20%» гиков — разрешить использоватьDVCS, умеющую работать с SVN:
I Bazaar (bzr-svn)1;I MercurialI GIT (git-svn); IMHO, на самый крайний случай!
и запретить отбиваться от коллектива.
1эта презентация сделана с использованием bzr-svn
84 / 86
В любом случае, посадите вашихтехнологов изучать DVCS.
The time is now!
85 / 86
Наши переводы статей о системахконтроля версий:
lib.custis.ru/index.php/VCSs
Наши семинары по эффективнойразработке:
team.custis.ru
ВАШИ ВОПРОСЫ?
86 / 86