SlideShare a Scribd company logo
1 of 86
Download to read offline
«Собор или базар»: системы контроля
  версий — централизованные или
         распределенные?

       Стас Фомин, stas@custis.ru
           Заказные ИнформСистемы


            29 октября 2009 г.




                                    1 / 86
Version Control System/Revision Control System


ПО для работы с изменяемыми
информационными объектами:
   хранение версий программных артефактов:
      программных кодов;
      документов и документации в целом;
      моделей САПР.

   мгновенный доступ к любой версии;
   обеспечение совместной работы команды.

                                           2 / 86
Классы систем управления версиями




     Системы управления версиями




                                    3 / 86
Классы систем управления версиями



              Системы управления версиями




   Однопользовательские        Многопользовательские




                                                4 / 86
Однопользовательские




  1 создать проект     Computer
                         Created by Andrew Fitzsimon




  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)
    Репозиторий
                    Workspace 1: c:projectssupercode
     Repository




                                                          12 / 86
Централизованный Repository и Workspaces



                          Рабочая станция «A» (Windows)

                    Workspace 1: c:projectssupercode
    Репозиторий
                           Рабочая станция «B» (Linux)
     Repository

                    Workspace 4: /usr/share/supercode




                                                          13 / 86
Централизованный Repository и Workspaces


                          Рабочая станция «A» (Windows)

                    Workspace 1: c:projectssupercode

    Репозиторий
                    Workspace 2: c:projectsbugfixes
     Repository

                           Рабочая станция «B» (Linux)

                    Workspace 4: /usr/share/supercode




                                                          14 / 86
Централизованный Repository и Workspaces


                          Рабочая станция «A» (Windows)

                    Workspace 1: c:projectssupercode


                     Workspace 2: c:projectsbugfixes
    Репозиторий
     Repository
                   Workspace 3: c:projectsexperimental


                           Рабочая станция «B» (Linux)

                     Workspace 4: /usr/share/supercode




                                                          15 / 86
Централизованный Repository и Workspaces

                           Рабочая станция «A» (Windows)

                     Workspace 1: c:projectssupercode


                     Workspace 2: c:projectsbugfixes

    Репозиторий
                   Workspace 3: c:projectsexperimental
     Repository

                            Рабочая станция «B» (Linux)

                     Workspace 4: /usr/share/supercode


                   Workspace 5: /usr/share/test-supercode




                                                           16 / 86
Централизованный 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
Базовые операции CVCS

checkout Извлечение данных из хранилища и
         создание рабочей копии. Возможно заказать
          определенные версий.

 update Обновление рабочей копии из
        репозитория. Можно переключится на другие
          версии.

 commit Создание новой версии, публикация
        изменений. Распространение изменений, сделанных
          в рабочей копии, на репозиторий. В хранилище создаётся

          новая версия.                               18 / 86
Централизованные системы
                Привычная всем схема!



                              Computer
                                Created by Andrew Fitzsimon
                                                              2 update

                1 checkout



                              Computer
                                Created by Andrew Fitzsimon




       Server   3 commit




                                                                         19 / 86
В CVCS версии линейно растут




                               20 / 86
Ветки и метки

     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
Базовые операции DVCS



Принцип Хоттабыча — каждому по репозиторию!
   commit     Фиксация новой версии в своем репозитарии.
       pull   Загрузка изменений от кого-то в отдельную ветку.
      push    Передача изменений кому-то в отдельную ветку.
     merge    Слияние изменений из двух веток.
    branch    Ветвление репозитория.




                                                       22 / 86
Распределенные системы — швейцарский нож
       Можно работать в одиночку без серверов!




    1 создать проект          Computer
                                Created by Andrew Fitzsimon




    2 запись изменений
    3 просмотр истории
    4 выпуск версий



                                                              23 / 86
Распределенные системы — швейцарский нож
Можно по старинке — с центральным сервером!




                                 Computer
                                   Created by Andrew Fitzsimon
                                                                 2 update

                   1 checkout



                                 Computer
                                   Created by Andrew Fitzsimon




         Server    3 commit




                                                                            24 / 86
Распределенные системы — швейцарский нож
Можно без центрального сервера — произвольная схема обмена
изменениями!




       1 запуск проект                                       2 клонирование-ветвление

                                                             Computer
           Computer                                              Created by Andrew Fitzsimon

             Created by Andrew Fitzsimon




                                               фиксируемые                                         фиксируемые
                                           3                                                   3
                                               правки                                              правки


           слияние                                                       слияние
       4                                                     4
           изменений                                                     изменений
           с товарищем                                                   с товарищем

                                                                                                           25 / 86
Распределенные системы — швейцарский нож
Можно с центральным сервером, с локальными фиксациями и
ветками, и отдельной стратегией публикации и слияний.




                                  Computer                        2 pull
                                                                    merge
                                    Created by Andrew Fitzsimon




    основной ствол
                     1 branch



                                  Computer
                                    Created by Andrew Fitzsimon




          Server     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
Эволюция систем контроля версий




                                            CVSNT:1998

  SCCS:1972   RCS:1980   CVCS   CVS:1985

                                           SVN:2000




                                             40 / 86
Проблемы CVS решенные в SVN


   +   Каталоги
   +   Транзакции
   +   Модификации имён файлов
   +   Метаданные (Свойства/properties)
   +   Блокировки
   +   Эффективность клиент-серверного обмена
   +   Эффективность хранения двоичных файлов
   +   Эффективность создания ветвей и меток
   +   Эффективность использования памяти сервера


                                                    41 / 86
Эволюция систем контроля версий




                                           CVSNT:1998

  SCCS:1972   RCS:1980   CVCS   CVS:1985

                                            SVN:2000




                                           42 / 86
Эволюция систем контроля версий



                                            CVSNT:1998

                          CVCS   CVS:1985

  SCCS:1972   RCS:1980                       SVN:2000


                         DVCS




                                            43 / 86
Эволюция систем контроля версий



                                                  CVSNT:1998

                        CVCS        CVS:1985

 SCCS:1972   RCS:1980                              SVN:2000

                        DVCS   arch:2001-2007

                               Monotone:200x




                                                44 / 86
Эволюция систем контроля версий


                                                     CVSNT:1998

                                     CVS:1985
                        CVCS
                                                      SVN:2000

 SCCS:1972   RCS:1980             arch:2001-2007


                        DVCS
                                  Monotone:200x




                               BitKeeper:2001




                                                   45 / 86
Эволюция систем контроля версий


                                                     CVSNT:1998



                                  CVS:1985            SVN:2000
                        CVCS


 SCCS:1972   RCS:1980          arch:2001-2007   Darcs:2003-2007
                        DVCS
                               Monotone:200x



                               BitKeeper:2001




                                                           46 / 86
Эволюция систем контроля версий


                                                  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
Эволюция систем контроля версий


                                                     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
Эволюция систем контроля версий

                                                    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
Эволюция систем контроля версий

                                                  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
Эволюция систем контроля версий

                                                  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
Эволюция систем контроля версий

                                                  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
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
Опрос на портале
  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 — полная беда. . . .
Невероятно, насколько эти люди глупы. Они все время смотрели
на проблему неверно. Проблема-то не в ветвлении, а в слиянии!
       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
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
Интеграция Ядра Линукса


            pull
                      Лейтенант 1 (USB)


            pull
   Линус              Лейтенант 2 (Сеть)
            pull



                     Лейтенант 3 (Память)



                                      68 / 86
Интеграция Ядра Линукса


                                               Доверенный 1/1
                                        pull

                                        pull
          pull
                  Лейтенант 1 (USB)            Доверенный 1/2
                                        pull

          pull
  Линус           Лейтенант 2 (Сеть)           Доверенный 1/3
          pull


                 Лейтенант 3 (Память)




                                                    69 / 86
Интеграция Ядра Линукса

                                               Доверенный 1/1
                                        pull


                                        pull   Доверенный 1/2

                  Лейтенант 1 (USB)     pull

                                               Доверенный 1/3

          pull

                                        pull   Доверенный 2/1
          pull
  Линус           Лейтенант 2 (Сеть)    pull
          pull
                                        pull   Доверенный 2/2

                 Лейтенант 3 (Память)

                                               Доверенный 2/3
                                                    70 / 86
Интеграция Ядра Линукса
                                                    Доверенный 1/1
                                             pull


                                             pull   Доверенный 1/2

                       Лейтенант 1 (USB)     pull

                                                    Доверенный 1/3


               pull
                                                    Доверенный 2/1
                                             pull

               pull                          pull
       Линус           Лейтенант 2 (Сеть)           Доверенный 2/2
                                             pull
               pull

                                                    Доверенный 2/3



                                             pull   Доверенный 3/1

                      Лейтенант 3 (Память)   pull

                                             pull   Доверенный 3/2




                                                    Доверенный 3/3   71 / 86
Интеграция Ядра Линукса
                                                    Доверенный 1/1
                                             pull


                                             pull   Доверенный 1/2

                       Лейтенант 1 (USB)     pull

                                                    Доверенный 1/3


               pull
                                                    Доверенный 2/1
                                             pull

               pull                          pull
       Линус           Лейтенант 2 (Сеть)           Доверенный 2/2
                                             pull
               pull

                                                    Доверенный 2/3



                                             pull   Доверенный 3/1

                      Лейтенант 3 (Память)   pull

                                             pull   Доверенный 3/2




                                                    Доверенный 3/3   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:
            Bazaar (bzr-svn)1 ;
            Mercurial
            GIT (git-svn); IMHO, на самый крайний случай!

       и запретить отбиваться от коллектива.
  1
      эта презентация сделана с использованием bzr-svn
                                                            81 / 86
Что выбрать?

Наш ответ на сегодня:
       Централизованный SVN-репозиторий.
       Удовлетворит «80%» (на самом деле 99%).
       «20%» гиков — разрешить использовать
       DVCS, умеющую работать с SVN:
            Bazaar (bzr-svn)1 ;
            Mercurial
            GIT (git-svn); IMHO, на самый крайний случай!

       и запретить отбиваться от коллектива.
  1
      эта презентация сделана с использованием bzr-svn
                                                            82 / 86
Что выбрать?

Наш ответ на сегодня:
       Централизованный SVN-репозиторий.
       Удовлетворит «80%» (на самом деле 99%).
       «20%» гиков — разрешить использовать
       DVCS, умеющую работать с SVN:
            Bazaar (bzr-svn)1 ;
            Mercurial
            GIT (git-svn); IMHO, на самый крайний случай!

       и запретить отбиваться от коллектива.
  1
      эта презентация сделана с использованием bzr-svn
                                                            83 / 86
Что выбрать?

Наш ответ на сегодня:
       Централизованный SVN-репозиторий.
       Удовлетворит «80%» (на самом деле 99%).
       «20%» гиков — разрешить использовать
       DVCS, умеющую работать с SVN:
            Bazaar (bzr-svn)1 ;
            Mercurial
            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

More Related Content

What's hot

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
dddpaul
 
Ross2013 rubanov
Ross2013 rubanovRoss2013 rubanov
Ross2013 rubanov
RosaLab
 
Вячеслав Бирюков - Дистрибутивы Linux
Вячеслав Бирюков - Дистрибутивы LinuxВячеслав Бирюков - Дистрибутивы Linux
Вячеслав Бирюков - Дистрибутивы Linux
Yandex
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
Max Glekov
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
Alex Chistyakov
 

What's hot (13)

Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
ПК КВГ
ПК КВГПК КВГ
ПК КВГ
 
Кластер высокой готовности @ Лаборатория 50
Кластер высокой готовности @ Лаборатория 50Кластер высокой готовности @ Лаборатория 50
Кластер высокой готовности @ Лаборатория 50
 
Cell и MC#
Cell и MC#Cell и MC#
Cell и MC#
 
Архитектура AMD64 (EM64T)
Архитектура AMD64 (EM64T)Архитектура AMD64 (EM64T)
Архитектура AMD64 (EM64T)
 
VivaCore - быстрый старт
VivaCore - быстрый стартVivaCore - быстрый старт
VivaCore - быстрый старт
 
Ross2013 rubanov
Ross2013 rubanovRoss2013 rubanov
Ross2013 rubanov
 
Norton Utilities
Norton UtilitiesNorton Utilities
Norton Utilities
 
Вячеслав Бирюков - Дистрибутивы Linux
Вячеслав Бирюков - Дистрибутивы LinuxВячеслав Бирюков - Дистрибутивы Linux
Вячеслав Бирюков - Дистрибутивы Linux
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
Практический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-системПрактический опыт применения виртуализации для web-систем
Практический опыт применения виртуализации для web-систем
 
Windows3.1
Windows3.1Windows3.1
Windows3.1
 

Viewers also liked

Viewers also liked (20)

системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
 
QA процесс, часть 2
QA процесс, часть 2QA процесс, часть 2
QA процесс, часть 2
 
От тестирования к QA
От тестирования к QAОт тестирования к QA
От тестирования к QA
 
Теория тестирования, часть 1
Теория тестирования, часть 1 Теория тестирования, часть 1
Теория тестирования, часть 1
 
QA процесс, часть 1
QA процесс, часть 1QA процесс, часть 1
QA процесс, часть 1
 
тестирование снецифических областей
тестирование снецифических областейтестирование снецифических областей
тестирование снецифических областей
 
обзор IT бизнеса
обзор IT бизнесаобзор IT бизнеса
обзор IT бизнеса
 
Методологии процесса разработки программного обеспечения
Методологии процесса разработки программного обеспеченияМетодологии процесса разработки программного обеспечения
Методологии процесса разработки программного обеспечения
 
Обзор средств сопровождения процесса разработки и тестирования (HP QC, Jira).
Обзор средств сопровождения процесса разработки и тестирования (HP QC, Jira).Обзор средств сопровождения процесса разработки и тестирования (HP QC, Jira).
Обзор средств сопровождения процесса разработки и тестирования (HP QC, Jira).
 
Requirements, введение в bug tracking systems.
Requirements, введение в bug tracking systems.Requirements, введение в bug tracking systems.
Requirements, введение в bug tracking systems.
 
программное обеспечение процесса тестирования
программное обеспечение процесса тестированияпрограммное обеспечение процесса тестирования
программное обеспечение процесса тестирования
 
Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.Тестирование сложных программных решений и комплексных систем.
Тестирование сложных программных решений и комплексных систем.
 
урок 1
урок 1урок 1
урок 1
 
Собеседование. Примеры вопросов, стратегия успешного прохождения собеседовани...
Собеседование. Примеры вопросов, стратегия успешного прохождения собеседовани...Собеседование. Примеры вопросов, стратегия успешного прохождения собеседовани...
Собеседование. Примеры вопросов, стратегия успешного прохождения собеседовани...
 
Дефекты (жизненный цикл дефекта, типы дефектов, описание дефектов).
Дефекты (жизненный цикл дефекта, типы дефектов, описание дефектов).Дефекты (жизненный цикл дефекта, типы дефектов, описание дефектов).
Дефекты (жизненный цикл дефекта, типы дефектов, описание дефектов).
 
базовые принципы работы с Git
базовые принципы работы с Gitбазовые принципы работы с Git
базовые принципы работы с Git
 
Базовые принципы работы с SVN.
Базовые принципы работы с SVN.Базовые принципы работы с SVN.
Базовые принципы работы с SVN.
 
Теория тестирования, часть 2 (процесс, компоненты).
Теория тестирования, часть 2 (процесс, компоненты).Теория тестирования, часть 2 (процесс, компоненты).
Теория тестирования, часть 2 (процесс, компоненты).
 
Обзор методологии SCRUM. Особенности SCRUM методологии. Вопросы коммуникации ...
Обзор методологии SCRUM. Особенности SCRUM методологии. Вопросы коммуникации ...Обзор методологии SCRUM. Особенности SCRUM методологии. Вопросы коммуникации ...
Обзор методологии SCRUM. Особенности SCRUM методологии. Вопросы коммуникации ...
 
Тесты (типы тестов, организация тестов, создание тестов).
Тесты (типы тестов, организация тестов, создание тестов).Тесты (типы тестов, организация тестов, создание тестов).
Тесты (типы тестов, организация тестов, создание тестов).
 

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

системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
Nicki Feathers
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применение
devclub
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версий
Yandex
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
Sergii Shmarkatiuk
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
7bits
 
Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Tools
colriot
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
7bits
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Vasily Sartakov
 

Similar to «Собор или базар»: системы контроля версий — централизованные или распределенные? (20)

системы контроля версий
системы контроля версийсистемы контроля версий
системы контроля версий
 
Операционные системы и среды
Операционные системы и средыОперационные системы и среды
Операционные системы и среды
 
Непрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применениеНепрерывная интеграция. Практическое применение
Непрерывная интеграция. Практическое применение
 
Филипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версийФилипп Синицин - Системы контроля версий
Филипп Синицин - Системы контроля версий
 
Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Containers in real world презентация
Containers in real world презентацияContainers in real world презентация
Containers in real world презентация
 
Использование контейнеризации в среде массового хостинга
Использование контейнеризации в среде массового хостингаИспользование контейнеризации в среде массового хостинга
Использование контейнеризации в среде массового хостинга
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
 
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCatПрограмма для регрессионного тестирования анализаторов PVS-Studio, CppCat
Программа для регрессионного тестирования анализаторов PVS-Studio, CppCat
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover Clustering
 
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотестыСтажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
Стажировка-2013, разработчики, занятие 6. Внешние конфиги, сборка, автотесты
 
Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1Операционные системы 2015, лекция № 1
Операционные системы 2015, лекция № 1
 
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
СКБ-Банк. Игорь Клопотов. "Apache ServiceMix: опыт внедрения и эксплуатации"
 
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Java. Lecture 12. Development Tools
Java. Lecture 12. Development ToolsJava. Lecture 12. Development Tools
Java. Lecture 12. Development Tools
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
 
От пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лабораторииОт пояса с инструментами к полноценной лаборатории
От пояса с инструментами к полноценной лаборатории
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 4
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
 
Linux
LinuxLinux
Linux
 

More from Stas Fomin

average-knapsack.beam.pdf
average-knapsack.beam.pdfaverage-knapsack.beam.pdf
average-knapsack.beam.pdf
Stas Fomin
 
Levenstein distance.beam
Levenstein distance.beamLevenstein distance.beam
Levenstein distance.beam
Stas Fomin
 
testopia-missing-link
testopia-missing-linktestopia-missing-link
testopia-missing-link
Stas Fomin
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в Subversion
Stas Fomin
 
Randomized Complexity
Randomized ComplexityRandomized Complexity
Randomized Complexity
Stas Fomin
 
P Reducibility And Npc
P Reducibility And NpcP Reducibility And Npc
P Reducibility And Npc
Stas Fomin
 
Probabilistically Checkable Proofs
Probabilistically Checkable ProofsProbabilistically Checkable Proofs
Probabilistically Checkable Proofs
Stas Fomin
 
Packing Average
Packing AveragePacking Average
Packing Average
Stas Fomin
 
Obfuscation Curstate Review
Obfuscation Curstate ReviewObfuscation Curstate Review
Obfuscation Curstate Review
Stas Fomin
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent Set
Stas Fomin
 
Max Cut Semidefinite
Max Cut SemidefiniteMax Cut Semidefinite
Max Cut Semidefinite
Stas Fomin
 
Intro And Samples
Intro And SamplesIntro And Samples
Intro And Samples
Stas Fomin
 
Greedy Knapsack
Greedy KnapsackGreedy Knapsack
Greedy Knapsack
Stas Fomin
 
Greedy Covering Almost Ok
Greedy Covering Almost OkGreedy Covering Almost Ok
Greedy Covering Almost Ok
Stas Fomin
 

More from Stas Fomin (20)

average-knapsack.beam.pdf
average-knapsack.beam.pdfaverage-knapsack.beam.pdf
average-knapsack.beam.pdf
 
Levenstein distance.beam
Levenstein distance.beamLevenstein distance.beam
Levenstein distance.beam
 
testopia-missing-link
testopia-missing-linktestopia-missing-link
testopia-missing-link
 
Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?
 
Mindmaps: история и идеология
Mindmaps: история и идеологияMindmaps: история и идеология
Mindmaps: история и идеология
 
Теория ограничений и Линейное программирование
Теория ограничений и Линейное программированиеТеория ограничений и Линейное программирование
Теория ограничений и Линейное программирование
 
Введение в Subversion
Введение в SubversionВведение в Subversion
Введение в Subversion
 
Fake Flash Drives from TopKeen
Fake Flash Drives from TopKeenFake Flash Drives from TopKeen
Fake Flash Drives from TopKeen
 
Randomized Complexity
Randomized ComplexityRandomized Complexity
Randomized Complexity
 
Ptas Knapsack
Ptas KnapsackPtas Knapsack
Ptas Knapsack
 
P Reducibility And Npc
P Reducibility And NpcP Reducibility And Npc
P Reducibility And Npc
 
Probabilistically Checkable Proofs
Probabilistically Checkable ProofsProbabilistically Checkable Proofs
Probabilistically Checkable Proofs
 
Packing Average
Packing AveragePacking Average
Packing Average
 
Obfuscation Curstate Review
Obfuscation Curstate ReviewObfuscation Curstate Review
Obfuscation Curstate Review
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent Set
 
Max Cut Semidefinite
Max Cut SemidefiniteMax Cut Semidefinite
Max Cut Semidefinite
 
Intro Erevan
Intro ErevanIntro Erevan
Intro Erevan
 
Intro And Samples
Intro And SamplesIntro And Samples
Intro And Samples
 
Greedy Knapsack
Greedy KnapsackGreedy Knapsack
Greedy Knapsack
 
Greedy Covering Almost Ok
Greedy Covering Almost OkGreedy Covering Almost Ok
Greedy Covering Almost Ok
 

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

  • 1. «Собор или базар»: системы контроля версий — централизованные или распределенные? Стас Фомин, stas@custis.ru Заказные ИнформСистемы 29 октября 2009 г. 1 / 86
  • 2. Version Control System/Revision Control System ПО для работы с изменяемыми информационными объектами: хранение версий программных артефактов: программных кодов; документов и документации в целом; моделей САПР. мгновенный доступ к любой версии; обеспечение совместной работы команды. 2 / 86
  • 3. Классы систем управления версиями Системы управления версиями 3 / 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
  • 11. Централизованный Repository и Workspaces Репозиторий Repository 11 / 86
  • 12. Централизованный Repository и Workspaces Рабочая станция «A» (Windows) Репозиторий Workspace 1: c:projectssupercode Repository 12 / 86
  • 13. Централизованный Repository и Workspaces Рабочая станция «A» (Windows) Workspace 1: c:projectssupercode Репозиторий Рабочая станция «B» (Linux) Repository Workspace 4: /usr/share/supercode 13 / 86
  • 14. Централизованный Repository и Workspaces Рабочая станция «A» (Windows) Workspace 1: c:projectssupercode Репозиторий Workspace 2: c:projectsbugfixes Repository Рабочая станция «B» (Linux) Workspace 4: /usr/share/supercode 14 / 86
  • 15. Централизованный Repository и Workspaces Рабочая станция «A» (Windows) Workspace 1: c:projectssupercode Workspace 2: c:projectsbugfixes Репозиторий Repository Workspace 3: c:projectsexperimental Рабочая станция «B» (Linux) Workspace 4: /usr/share/supercode 15 / 86
  • 16. Централизованный Repository и Workspaces Рабочая станция «A» (Windows) Workspace 1: c:projectssupercode Workspace 2: c:projectsbugfixes Репозиторий Workspace 3: c:projectsexperimental Repository Рабочая станция «B» (Linux) Workspace 4: /usr/share/supercode Workspace 5: /usr/share/test-supercode 16 / 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
  • 20. В CVCS версии линейно растут 20 / 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
  • 35. Эволюция систем контроля версий SCCS:1972 35 / 86
  • 36. Эволюция систем контроля версий SCCS:1972 RCS:1980 36 / 86
  • 37. Эволюция систем контроля версий SCCS:1972 RCS:1980 CVCS 37 / 86
  • 38. Эволюция систем контроля версий SCCS:1972 RCS:1980 CVCS CVS:1985 38 / 86
  • 39. Эволюция систем контроля версий SCCS:1972 RCS:1980 CVCS CVS:1985 CVSNT:1998 39 / 86
  • 40. Эволюция систем контроля версий CVSNT:1998 SCCS:1972 RCS:1980 CVCS CVS:1985 SVN:2000 40 / 86
  • 41. Проблемы CVS решенные в SVN + Каталоги + Транзакции + Модификации имён файлов + Метаданные (Свойства/properties) + Блокировки + Эффективность клиент-серверного обмена + Эффективность хранения двоичных файлов + Эффективность создания ветвей и меток + Эффективность использования памяти сервера 41 / 86
  • 42. Эволюция систем контроля версий CVSNT:1998 SCCS:1972 RCS:1980 CVCS CVS:1985 SVN:2000 42 / 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
  • 54. Опрос на портале habrahabr.ru 26-27 октября 2009 54 / 86
  • 55. Опрос на портале habrahabr.ru 26-27 октября 2009 55 / 86
  • 56. Опрос на портале habrahabr.ru 26-27 октября 2009 56 / 86
  • 57. Опрос на портале habrahabr.ru ? 26-27 октября 2009 57 / 86
  • 58. Война DVCS vs. CVCS! 58 / 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
  • 68. Интеграция Ядра Линукса pull Лейтенант 1 (USB) pull Линус Лейтенант 2 (Сеть) pull Лейтенант 3 (Память) 68 / 86
  • 69. Интеграция Ядра Линукса Доверенный 1/1 pull pull pull Лейтенант 1 (USB) Доверенный 1/2 pull pull Линус Лейтенант 2 (Сеть) Доверенный 1/3 pull Лейтенант 3 (Память) 69 / 86
  • 70. Интеграция Ядра Линукса Доверенный 1/1 pull pull Доверенный 1/2 Лейтенант 1 (USB) pull Доверенный 1/3 pull pull Доверенный 2/1 pull Линус Лейтенант 2 (Сеть) pull pull pull Доверенный 2/2 Лейтенант 3 (Память) Доверенный 2/3 70 / 86
  • 71. Интеграция Ядра Линукса Доверенный 1/1 pull pull Доверенный 1/2 Лейтенант 1 (USB) pull Доверенный 1/3 pull Доверенный 2/1 pull pull pull Линус Лейтенант 2 (Сеть) Доверенный 2/2 pull pull Доверенный 2/3 pull Доверенный 3/1 Лейтенант 3 (Память) pull pull Доверенный 3/2 Доверенный 3/3 71 / 86
  • 72. Интеграция Ядра Линукса Доверенный 1/1 pull pull Доверенный 1/2 Лейтенант 1 (USB) pull Доверенный 1/3 pull Доверенный 2/1 pull pull pull Линус Лейтенант 2 (Сеть) Доверенный 2/2 pull pull Доверенный 2/3 pull Доверенный 3/1 Лейтенант 3 (Память) pull pull Доверенный 3/2 Доверенный 3/3 72 / 86
  • 73. Базар! Надо себя «продавать»! 73 / 86
  • 75. Плюсы DVCS + Работа оффлайн + Очень быстро коммитить + Очень быстро копаться в истории + Один пользователь/много машин («конфигурации») + Поддержка шизофрении полифонии веток с легкими слияниями 75 / 86
  • 76. Минусы DVCS − Нельзя ограничить доступ на чтение − Нельзя работать с частью репозитория − Большие репозитарии («начальное клонирование») − Нет блокировки бинарников для целостности − «Кодовые бомбы» − Трудно контролировать! Нет единой шкалы версий! − Отстает интеграция с IDE, поисковыми и вебсистемами. − Непросто с практикой Continuous Integration 76 / 86
  • 77. DVCS & CI — OK 77 / 86
  • 78. DVCS & CI — NOT OK 78 / 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