«Собор или базар»: системы контроля версий —...

Post on 17-Nov-2014

2.672 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

«Собор или базар»: системы контроля версий — централизованные или распределенные? Слайды к одноименному докладу на SECR-2009.

TRANSCRIPT

«Собор или базар»: системы контроляверсий — централизованные или

распределенные?

Стас Фомин, stas@custis.ru

Заказные ИнформСистемы

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

top related