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

       Стас Фомин, 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

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

  • 1.
    «Собор или базар»:системы контроля версий — централизованные или распределенные? Стас Фомин, stas@custis.ru Заказные ИнформСистемы 29 октября 2009 г. 1 / 86
  • 2.
    Version Control System/RevisionControl 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
  • 63.
  • 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
  • 67.
  • 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
  • 74.
  • 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