SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
Subversion: Введение

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


      31 марта 2009 г.




                             1 / 47
План лекции




              2 / 47
Проблемы разработки ПО: Сценарий 1


  Вы пишете статью. Совместно с соавтором.
  Нужно править статьи одновременно.
  Не должна пропасть работа корректора, правившего версию
  недельной давности.
  Ваши новые правки тоже не должны пропасть.
  И все это в режиме «non-stop».


             Возможно ли это?

                                                  3 / 47
Проблемы разработки ПО: Сценарий 1




                             4 / 47
5 / 47
Проблемы разработки ПО: Сценарий 2


  Вы работаете над версией 2.0 замечательной
  «супер-информационной системы».
  Версия 2.0 еще совсем сырая, даже не компилируется.
  Заказчик находит критический баг в версии 1.0!

                  Что делать?

  А если коды версии 1.0 утеряны?

                                                   6 / 47
Проблемы разработки ПО: Сценарий 2


  Вы работаете над версией 2.0 замечательной
  «супер-информационной системы».
  Версия 2.0 еще совсем сырая, даже не компилируется.
  Заказчик находит критический баг в версии 1.0!

                  Что делать?

  А если коды версии 1.0 утеряны?

                                                   7 / 47
Проблемы разработки ПО: Сценарий 2


  Вы работаете над версией 2.0 замечательной
  «супер-информационной системы».
  Версия 2.0 еще совсем сырая, даже не компилируется.
  Заказчик находит критический баг в версии 1.0!

                  Что делать?

  А если коды версии 1.0 утеряны?

                                                   8 / 47
Проблемы разработки ПО: Сценарий 3

Кто добавил вредный код в ваш проект из 100000 строк?




             int bad_function(int a, int b){
               int c=a/b;
               if (a=b){
                 // do not forget to remove
                // it nahren
                return 137;
               }
               c++;
             }
                               LINUX




Ну или поблагодарить за эффективный код?                9 / 47
Проблемы разработки ПО: Сценарий 3

Кто добавил вредный код в ваш проект из 100000 строк?




             int bad_function(int a, int b){
               int c=a/b;
               if (a=b){
                 // do not forget to remove
                // it nahren
                return 137;
               }
               c++;
             }
                               LINUX




Ну или поблагодарить за эффективный код?           10 / 47
SCM/Software Configuration Management


Управление конфигурациями
Формальная и инструментальная систематизация управления
изменениями в информационной системе, включая:
    программные продукты;
    информационные модели и иные артефакты (например,
    электронные документы);
    «железо»;
    средства аудита самой системы;
    метрики работы системы (логи, журналы, архивы).


                                                 11 / 47
SCM/Software Configuration Management

                                               ведение
                                            документации
                        архивирование
                                                                       учет
                                                                требований/ошибок


          управление
           сборками



                                        Конфигурационное                     контроль
                                           управление                     исходного кода


       учет окружения




                      работа
                   команд/групп

                                              поддержка
                                         процессов разработки
                                                                                           12 / 47
Version Control System/Revision Control System


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



                                               13 / 47
Типы СУВ




  Однопользовательские (Локальные)
  Многопользовательские:
      Централизованные;
      Распределенные.




                                     14 / 47
Глоссарий централизованных СУВ



 repository Хранилище документов — место, где система
            управления версиями хранит все документы вместе с
            историей их изменения и другой служебной
            информацией.
   revision Версия документа. СУВ различают версии по
            номерам/меткам, которые назначаются
            автоматически.
 workspace Рабочая/локальная копия документов (working copy ).




                                                    15 / 47
Централизованные СУВ: Workspace/Repository

                        Рабочая станция «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
                                                             16 / 47
История управления конфигурациями

   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.

                                                17 / 47
Основной ствол эволюции СУВ

         SCCS:Source Code Control System:1972




           RCS:Revision Control System:1980




         CVS:Concurrent Versions System:1985




                 SVN:Subversion:2001


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

                                               SVN:2000



                                             CVSNT:1998



                          CVS:1985         DCVS:2002-2005



                        OpenRCS:2006        OpenCVS:2006



                        Monotone:200x    GIT:2006 (Linux here!)

 SCCS:1972   RCS:1980

                        BitKeeper:2001      Mercurial:2005



                        PRCS:1985-199x
                                              Bazaar:2004



                        arch:2001-2007
                                            ArX:2003-2005



                                                       19 / 47
                                            Darcs:2003-2007
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.   20 / 47
Subversion: история


    2000 CollabNet, Inc: запуск проекта «наследник CVS».
    2001 Subversion стал хранится под Subversion.
    2004 Релиз 1.0.
    2005 Релиз 1.2. Возможность блокировки (поддержка
         WebDAV/DeltaV).
    2008 Релиз 1.5. Отслеживание слияний.
    2009 Релиз 1.6. Определение «Конфликтов файловой
         структуры»



                                                   21 / 47
«трехмерность» репозитория Subversion


                 SVN
                                            SVN
              Repository
              Revision n
                                         3D-Tree

                       Branches
                       Revision 1




                         Tags
                       Revision 2




                                                            File A
                         Trunk                           Revision 8
                       Revision 3                    File A
                                                  Revision 7
                                              File A
                                            Revision 6


                                             File B
                                          Revision 6
                                      File B
                                    Revision 5


                                                                      22 / 47
«двумерный» репозиторий Subversion




                                     23 / 47
Ревизии: «Стержневые» и «Оперативные»




                                  24 / 47
Репозитарий Subversion




 Экономия: храняться только изменения между версиями. Как
        для текстовых, так и для бинарных файлов.


Совет
Старайтесь хранить в репозитарии только текстовые файлы!
Бинарные файлы получайте с помощью систем сборки.




                                                   25 / 47
Базовые операции

  checkout Извлечение документа из хранилища и создание
           рабочей копии.
           Возможно заказать определенные версий файлов
           или наборов файлов.
    update Обновление рабочей копии из репозитория.
           Можно переключится на другие версии файлов.
   commit Создание новой версии, публикация изменений.
           Распространение изменений, сделанных в рабочей
           копии, на хранилище документов. При этом в
           хранилище создаётся новая версия изменённых
           документов.
Помните!
«Копирование-Изменение-Слияние» на порядок эффективней
модели «Блокирование-Изменение-Разблокирование»! 26 / 47
Репозиторий
        04 04 04 04 04 04 04 04 04 04 04
        20 35 3F 3E 37 38 42 3E 40 38 39




LINUX




LINUX
                       0


LINUX




                         27 / 47
Cover.svg       Репозиторий
              04 04 04 04 04 04 04 04 04 04 04
              20 35 3F 3E 37 38 42 3E 40 38 39




      LINUX




      LINUX
                             0


      LINUX




                               28 / 47
Cover.svg                    Репозиторий
                           04 04 04 04 04 04 04 04 04 04 04
                           20 35 3F 3E 37 38 42 3E 40 38 39




      LINUX




      LINUX
                                          0
                  kyle> svn add Cover.svg
              A        Cover.svg


      LINUX




                                            29 / 47
Cover.svg                Репозиторий
                       04 04 04 04 04 04 04 04 04 04 04
                       20 35 3F 3E 37 38 42 3E 40 38 39




      LINUX




      LINUX
                                      0
              kyle> svn commit



      LINUX




                                        30 / 47
Cover.svg@1                Репозиторий
                         04 04 04 04 04 04 04 04 04 04 04
                         20 35 3F 3E 37 38 42 3E 40 38 39


                       Cover.svg
      LINUX




      LINUX
                                        1
                kyle> svn commit
              Completed      At revision 1


      LINUX




                                          31 / 47
Cover.svg@12                Репозиторий
                           04 04 04 04 04 04 04 04 04 04 04
                           20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt
                         Cover.svg
       LINUX




       LINUX
                                        12
                  kyle> svn add Chapter-1.txt
                A      Chapter-1.txt
                kyle> svn commit Chapter-1.txt
       LINUX




                                            32 / 47
Cover.svg@12                   Репозиторий
                              04 04 04 04 04 04 04 04 04 04 04
                              20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt@13
                            Cover.svg
                           Chapter-1.txt
       LINUX




       LINUX
                                           13
                     kyle> svn add Chapter-1.txt
                   A      Chapter-1.txt
                   kyle> svn commit Chapter-1.txt
                   Completed      At revision 13
       LINUX




                                               33 / 47
Cover.svg@12                   Репозиторий
                              04 04 04 04 04 04 04 04 04 04 04
                              20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt@13
                            Cover.svg
                           Chapter-1.txt
       LINUX




 Cover.svg@13
Chapter-1.txt@13


       LINUX
                                           13
                     stan> svn checkout ...
                   U      Cover.svg
                   U      Chapter-1.txt
                   Completed      At revision 13
       LINUX




                                               34 / 47
Cover.svg@12                   Репозиторий
                              04 04 04 04 04 04 04 04 04 04 04
                              20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt@13
                            Cover.svg
                           Chapter-1.txt
       LINUX




 Cover.svg@21
Chapter-1.txt@21


       LINUX
                                           21
                     kyle> svn commit
                   svn: Commit failed:
                   svn: Your file or directory
                   ’Chapter-1.txt’ is
       LINUX

                   probably out-of-date
                                               35 / 47
Базовые события

     merge Слияние — объединение независимых изменений в
             единую версию документа.
    conflict Конфликт — ситуация, когда несколько
             пользователей сделали изменения одного и того же
             участка документа.
Конфликт обнаруживается, когда один пользователь опубликовал
свои изменения, а второй пытается опубликовать и система сама
не может корректно слить конфликтующие изменения.
Маркеры конфликта:
<<<<<<<   .mine
И опыт,   сын ашипок трудных, и гений, парадоксов друг
=======
И опыт,   сын ошибок трудных, и гений, породоксов друг
>>>>>>>   .r12                                   36 / 47
Cover.svg@21                   Репозиторий
                              04 04 04 04 04 04 04 04 04 04 04
                              20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt@21
                            Cover.svg
                           Chapter-1.txt
       LINUX




 Cover.svg@21
Chapter-1.txt@21


       LINUX
                                           21
                     kyle> svn update
                   G Chapter-1.txt
                   Updated to revision 21.
       LINUX




                                               37 / 47
Chapter-1.txt@21                  Репозиторий
                                04 04 04 04 04 04 04 04 04 04 04
                                20 35 3F 3E 37 38 42 3E 40 38 39
Chapter-1.txt.mine
Chapter-1.txt.r12             Cover.svg
Chapter-1.txt.r21            Chapter-1.txt
       LINUX




 Cover.svg@21
Chapter-1.txt@21


       LINUX
                                             21
                       kyle> svn update
                     C Chapter-1.txt
                     Updated to revision 21.
       LINUX




                                                 38 / 47
«Status»




sandboxtrunkarticles>svn status -v
?                                       e
                4        4 teacher      .
                9        9 teacher      article-1.txt
               10       10 student16    article-2.txt




                                               39 / 47
«Diff»

   «diff» – известная UNIX-утилита для сравнения текстовых
   файлов
   Команда всех СУВ, показывающая разницу между версиями.




                                                 40 / 47
«Blame»/«Annotate»/«Praise»

   Позволяет видеть кто и когда отредактировал каждую
   строчку.
   Позволяет найти виновного за баг.
   Эффективно использовать совместно с «diff» и историей
   изменений.




                                                  41 / 47
Ветки и метки

   branch Ветки — параллельные процессы эволюции кода.
          Одинаковая историю до точки ветвления и разная —
          после неё. Например, удобно держать отдельные
          ветки для учета багов в выпущенных версиях или
          проверки экспериментальных идей. Сливают ветки
          между собой, или с основным стволом разработки.
      tag Метка — символическое имя для группы
          ревизий/документов.




                                                 42 / 47
Ветки и метки в Subversion




                  Их нет!



                             43 / 47
Ветки и метки в Subversion

 Но есть «джентельменское соглашение о структуре каталогов»:
/branches
/tags
/trunk
В случае нескольких проектов в одном репозитории:
/project1
   /branches
   /tags
   /trunk
/project2
   /branches
   /tags
   /trunk
                                                    44 / 47
Проблемы CVS решенные в SVN


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


                                                    45 / 47
TortoiseSVN

        Лучшие клиенты под Windows!




      Сейчас ознакомимся на практике!
                                     46 / 47
СПАСИБО ЗА ВНИМАНИЕ.
   ВАШИ ВОПРОСЫ?




                   47 / 47

Contenu connexe

Tendances

02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S PbLiudmila Li
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixMichael Ganschuk
 
Urazbaev
UrazbaevUrazbaev
Urazbaevsef2009
 
Юрий Трухин (InfoboxCloud)
Юрий Трухин (InfoboxCloud)Юрий Трухин (InfoboxCloud)
Юрий Трухин (InfoboxCloud)Ontico
 
OO Design with C++: 4. Design Principles, part 1
OO Design with C++: 4. Design Principles, part 1OO Design with C++: 4. Design Principles, part 1
OO Design with C++: 4. Design Principles, part 1Dmitry Stillermann
 
Нагрузочное тестирование клиент-серверных приложений
Нагрузочное тестирование клиент-серверных приложенийНагрузочное тестирование клиент-серверных приложений
Нагрузочное тестирование клиент-серверных приложенийSQALab
 
Sef 2009 Itsm
Sef 2009 ItsmSef 2009 Itsm
Sef 2009 Itsmsef2009
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E RussianLiudmila Li
 
бешков Lm Csv Rootconf
бешков Lm Csv Rootconfбешков Lm Csv Rootconf
бешков Lm Csv RootconfLiudmila Li
 
советы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерсоветы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерanna.korovko
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1Liudmila Li
 
Alexey Ki Microsoft Citrix
Alexey Ki Microsoft CitrixAlexey Ki Microsoft Citrix
Alexey Ki Microsoft CitrixLiudmila Li
 
для менеджер клуба
для менеджер клубадля менеджер клуба
для менеджер клубаarealconsulting
 
Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationgueste4928d
 

Tendances (18)

02 Citrus Systems S Pb
02 Citrus Systems S Pb02 Citrus Systems S Pb
02 Citrus Systems S Pb
 
Mixing Agile Rup
Mixing Agile RupMixing Agile Rup
Mixing Agile Rup
 
Gate 4000
Gate 4000Gate 4000
Gate 4000
 
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbixElina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix
 
Urazbaev
UrazbaevUrazbaev
Urazbaev
 
Юрий Трухин (InfoboxCloud)
Юрий Трухин (InfoboxCloud)Юрий Трухин (InfoboxCloud)
Юрий Трухин (InfoboxCloud)
 
OO Design with C++: 4. Design Principles, part 1
OO Design with C++: 4. Design Principles, part 1OO Design with C++: 4. Design Principles, part 1
OO Design with C++: 4. Design Principles, part 1
 
10 Xs Dg
10 Xs Dg10 Xs Dg
10 Xs Dg
 
Нагрузочное тестирование клиент-серверных приложений
Нагрузочное тестирование клиент-серверных приложенийНагрузочное тестирование клиент-серверных приложений
Нагрузочное тестирование клиент-серверных приложений
 
Sef 2009 Itsm
Sef 2009 ItsmSef 2009 Itsm
Sef 2009 Itsm
 
Wyse Präsentation C Itrix S E Russian
Wyse  Präsentation  C Itrix  S E  RussianWyse  Präsentation  C Itrix  S E  Russian
Wyse Präsentation C Itrix S E Russian
 
бешков Lm Csv Rootconf
бешков Lm Csv Rootconfбешков Lm Csv Rootconf
бешков Lm Csv Rootconf
 
3
33
3
 
советы, которые спасут ваш компьютер
советы, которые спасут ваш компьютерсоветы, которые спасут ваш компьютер
советы, которые спасут ваш компьютер
 
присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1присяжный Root Conf2009 Beta 1
присяжный Root Conf2009 Beta 1
 
Alexey Ki Microsoft Citrix
Alexey Ki Microsoft CitrixAlexey Ki Microsoft Citrix
Alexey Ki Microsoft Citrix
 
для менеджер клуба
для менеджер клубадля менеджер клуба
для менеджер клуба
 
Almost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migrationAlmost Success Story: Unix to Linux migration
Almost Success Story: Unix to Linux migration
 

Plus de Stas Fomin

average-knapsack.beam.pdf
average-knapsack.beam.pdfaverage-knapsack.beam.pdf
average-knapsack.beam.pdfStas Fomin
 
Levenstein distance.beam
Levenstein distance.beamLevenstein distance.beam
Levenstein distance.beamStas Fomin
 
testopia-missing-link
testopia-missing-linktestopia-missing-link
testopia-missing-linkStas Fomin
 
«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...«Собор или базар»: системы контроля версий — централизованные или распределен...
«Собор или базар»: системы контроля версий — централизованные или распределен...Stas Fomin
 
Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Какой у вас Agile: свежевыжатый или порошковый?
Какой у вас Agile: свежевыжатый или порошковый?Stas Fomin
 
Mindmaps: история и идеология
Mindmaps: история и идеологияMindmaps: история и идеология
Mindmaps: история и идеологияStas Fomin
 
Теория ограничений и Линейное программирование
Теория ограничений и Линейное программированиеТеория ограничений и Линейное программирование
Теория ограничений и Линейное программированиеStas Fomin
 
Fake Flash Drives from TopKeen
Fake Flash Drives from TopKeenFake Flash Drives from TopKeen
Fake Flash Drives from TopKeenStas Fomin
 
Randomized Complexity
Randomized ComplexityRandomized Complexity
Randomized ComplexityStas Fomin
 
P Reducibility And Npc
P Reducibility And NpcP Reducibility And Npc
P Reducibility And NpcStas Fomin
 
Probabilistically Checkable Proofs
Probabilistically Checkable ProofsProbabilistically Checkable Proofs
Probabilistically Checkable ProofsStas Fomin
 
Packing Average
Packing AveragePacking Average
Packing AverageStas Fomin
 
Obfuscation Curstate Review
Obfuscation Curstate ReviewObfuscation Curstate Review
Obfuscation Curstate ReviewStas Fomin
 
Maximal Independent Set
Maximal Independent SetMaximal Independent Set
Maximal Independent SetStas Fomin
 
Max Cut Semidefinite
Max Cut SemidefiniteMax Cut Semidefinite
Max Cut SemidefiniteStas Fomin
 
Intro And Samples
Intro And SamplesIntro And Samples
Intro And SamplesStas Fomin
 
Greedy Knapsack
Greedy KnapsackGreedy Knapsack
Greedy KnapsackStas Fomin
 
Greedy Covering Almost Ok
Greedy Covering Almost OkGreedy Covering Almost Ok
Greedy Covering Almost OkStas Fomin
 

Plus de 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: история и идеология
 
Теория ограничений и Линейное программирование
Теория ограничений и Линейное программированиеТеория ограничений и Линейное программирование
Теория ограничений и Линейное программирование
 
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
 

Введение в Subversion

  • 1. Subversion: Введение Стас Фомин, stas@custis.ru Заказные ИнформСистемы 31 марта 2009 г. 1 / 47
  • 3. Проблемы разработки ПО: Сценарий 1 Вы пишете статью. Совместно с соавтором. Нужно править статьи одновременно. Не должна пропасть работа корректора, правившего версию недельной давности. Ваши новые правки тоже не должны пропасть. И все это в режиме «non-stop». Возможно ли это? 3 / 47
  • 6. Проблемы разработки ПО: Сценарий 2 Вы работаете над версией 2.0 замечательной «супер-информационной системы». Версия 2.0 еще совсем сырая, даже не компилируется. Заказчик находит критический баг в версии 1.0! Что делать? А если коды версии 1.0 утеряны? 6 / 47
  • 7. Проблемы разработки ПО: Сценарий 2 Вы работаете над версией 2.0 замечательной «супер-информационной системы». Версия 2.0 еще совсем сырая, даже не компилируется. Заказчик находит критический баг в версии 1.0! Что делать? А если коды версии 1.0 утеряны? 7 / 47
  • 8. Проблемы разработки ПО: Сценарий 2 Вы работаете над версией 2.0 замечательной «супер-информационной системы». Версия 2.0 еще совсем сырая, даже не компилируется. Заказчик находит критический баг в версии 1.0! Что делать? А если коды версии 1.0 утеряны? 8 / 47
  • 9. Проблемы разработки ПО: Сценарий 3 Кто добавил вредный код в ваш проект из 100000 строк? int bad_function(int a, int b){ int c=a/b; if (a=b){ // do not forget to remove // it nahren return 137; } c++; } LINUX Ну или поблагодарить за эффективный код? 9 / 47
  • 10. Проблемы разработки ПО: Сценарий 3 Кто добавил вредный код в ваш проект из 100000 строк? int bad_function(int a, int b){ int c=a/b; if (a=b){ // do not forget to remove // it nahren return 137; } c++; } LINUX Ну или поблагодарить за эффективный код? 10 / 47
  • 11. SCM/Software Configuration Management Управление конфигурациями Формальная и инструментальная систематизация управления изменениями в информационной системе, включая: программные продукты; информационные модели и иные артефакты (например, электронные документы); «железо»; средства аудита самой системы; метрики работы системы (логи, журналы, архивы). 11 / 47
  • 12. SCM/Software Configuration Management ведение документации архивирование учет требований/ошибок управление сборками Конфигурационное контроль управление исходного кода учет окружения работа команд/групп поддержка процессов разработки 12 / 47
  • 13. Version Control System/Revision Control System Система управления версиями ПО для работы с изменяемыми информационными объектами: хранение версий программных артефактов: программных кодов; документов и документации в целом; моделей САПР. мгновенный доступ к любой версии; обеспечение совместной работы команды. 13 / 47
  • 14. Типы СУВ Однопользовательские (Локальные) Многопользовательские: Централизованные; Распределенные. 14 / 47
  • 15. Глоссарий централизованных СУВ repository Хранилище документов — место, где система управления версиями хранит все документы вместе с историей их изменения и другой служебной информацией. revision Версия документа. СУВ различают версии по номерам/меткам, которые назначаются автоматически. workspace Рабочая/локальная копия документов (working copy ). 15 / 47
  • 16. Централизованные СУВ: Workspace/Repository Рабочая станция «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 16 / 47
  • 17. История управления конфигурациями 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. 17 / 47
  • 18. Основной ствол эволюции СУВ SCCS:Source Code Control System:1972 RCS:Revision Control System:1980 CVS:Concurrent Versions System:1985 SVN:Subversion:2001 18 / 47
  • 19. Эволюция систем контроля версий SVN:2000 CVSNT:1998 CVS:1985 DCVS:2002-2005 OpenRCS:2006 OpenCVS:2006 Monotone:200x GIT:2006 (Linux here!) SCCS:1972 RCS:1980 BitKeeper:2001 Mercurial:2005 PRCS:1985-199x Bazaar:2004 arch:2001-2007 ArX:2003-2005 19 / 47 Darcs:2003-2007
  • 20. 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. 20 / 47
  • 21. Subversion: история 2000 CollabNet, Inc: запуск проекта «наследник CVS». 2001 Subversion стал хранится под Subversion. 2004 Релиз 1.0. 2005 Релиз 1.2. Возможность блокировки (поддержка WebDAV/DeltaV). 2008 Релиз 1.5. Отслеживание слияний. 2009 Релиз 1.6. Определение «Конфликтов файловой структуры» 21 / 47
  • 22. «трехмерность» репозитория Subversion SVN SVN Repository Revision n 3D-Tree Branches Revision 1 Tags Revision 2 File A Trunk Revision 8 Revision 3 File A Revision 7 File A Revision 6 File B Revision 6 File B Revision 5 22 / 47
  • 24. Ревизии: «Стержневые» и «Оперативные» 24 / 47
  • 25. Репозитарий Subversion Экономия: храняться только изменения между версиями. Как для текстовых, так и для бинарных файлов. Совет Старайтесь хранить в репозитарии только текстовые файлы! Бинарные файлы получайте с помощью систем сборки. 25 / 47
  • 26. Базовые операции checkout Извлечение документа из хранилища и создание рабочей копии. Возможно заказать определенные версий файлов или наборов файлов. update Обновление рабочей копии из репозитория. Можно переключится на другие версии файлов. commit Создание новой версии, публикация изменений. Распространение изменений, сделанных в рабочей копии, на хранилище документов. При этом в хранилище создаётся новая версия изменённых документов. Помните! «Копирование-Изменение-Слияние» на порядок эффективней модели «Блокирование-Изменение-Разблокирование»! 26 / 47
  • 27. Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 LINUX LINUX 0 LINUX 27 / 47
  • 28. Cover.svg Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 LINUX LINUX 0 LINUX 28 / 47
  • 29. Cover.svg Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 LINUX LINUX 0 kyle> svn add Cover.svg A Cover.svg LINUX 29 / 47
  • 30. Cover.svg Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 LINUX LINUX 0 kyle> svn commit LINUX 30 / 47
  • 31. Cover.svg@1 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Cover.svg LINUX LINUX 1 kyle> svn commit Completed At revision 1 LINUX 31 / 47
  • 32. Cover.svg@12 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt Cover.svg LINUX LINUX 12 kyle> svn add Chapter-1.txt A Chapter-1.txt kyle> svn commit Chapter-1.txt LINUX 32 / 47
  • 33. Cover.svg@12 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt@13 Cover.svg Chapter-1.txt LINUX LINUX 13 kyle> svn add Chapter-1.txt A Chapter-1.txt kyle> svn commit Chapter-1.txt Completed At revision 13 LINUX 33 / 47
  • 34. Cover.svg@12 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt@13 Cover.svg Chapter-1.txt LINUX Cover.svg@13 Chapter-1.txt@13 LINUX 13 stan> svn checkout ... U Cover.svg U Chapter-1.txt Completed At revision 13 LINUX 34 / 47
  • 35. Cover.svg@12 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt@13 Cover.svg Chapter-1.txt LINUX Cover.svg@21 Chapter-1.txt@21 LINUX 21 kyle> svn commit svn: Commit failed: svn: Your file or directory ’Chapter-1.txt’ is LINUX probably out-of-date 35 / 47
  • 36. Базовые события merge Слияние — объединение независимых изменений в единую версию документа. conflict Конфликт — ситуация, когда несколько пользователей сделали изменения одного и того же участка документа. Конфликт обнаруживается, когда один пользователь опубликовал свои изменения, а второй пытается опубликовать и система сама не может корректно слить конфликтующие изменения. Маркеры конфликта: <<<<<<< .mine И опыт, сын ашипок трудных, и гений, парадоксов друг ======= И опыт, сын ошибок трудных, и гений, породоксов друг >>>>>>> .r12 36 / 47
  • 37. Cover.svg@21 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt@21 Cover.svg Chapter-1.txt LINUX Cover.svg@21 Chapter-1.txt@21 LINUX 21 kyle> svn update G Chapter-1.txt Updated to revision 21. LINUX 37 / 47
  • 38. Chapter-1.txt@21 Репозиторий 04 04 04 04 04 04 04 04 04 04 04 20 35 3F 3E 37 38 42 3E 40 38 39 Chapter-1.txt.mine Chapter-1.txt.r12 Cover.svg Chapter-1.txt.r21 Chapter-1.txt LINUX Cover.svg@21 Chapter-1.txt@21 LINUX 21 kyle> svn update C Chapter-1.txt Updated to revision 21. LINUX 38 / 47
  • 39. «Status» sandboxtrunkarticles>svn status -v ? e 4 4 teacher . 9 9 teacher article-1.txt 10 10 student16 article-2.txt 39 / 47
  • 40. «Diff» «diff» – известная UNIX-утилита для сравнения текстовых файлов Команда всех СУВ, показывающая разницу между версиями. 40 / 47
  • 41. «Blame»/«Annotate»/«Praise» Позволяет видеть кто и когда отредактировал каждую строчку. Позволяет найти виновного за баг. Эффективно использовать совместно с «diff» и историей изменений. 41 / 47
  • 42. Ветки и метки branch Ветки — параллельные процессы эволюции кода. Одинаковая историю до точки ветвления и разная — после неё. Например, удобно держать отдельные ветки для учета багов в выпущенных версиях или проверки экспериментальных идей. Сливают ветки между собой, или с основным стволом разработки. tag Метка — символическое имя для группы ревизий/документов. 42 / 47
  • 43. Ветки и метки в Subversion Их нет! 43 / 47
  • 44. Ветки и метки в Subversion Но есть «джентельменское соглашение о структуре каталогов»: /branches /tags /trunk В случае нескольких проектов в одном репозитории: /project1 /branches /tags /trunk /project2 /branches /tags /trunk 44 / 47
  • 45. Проблемы CVS решенные в SVN + Каталоги + Транзакции + Модификации имён файлов + Метаданные (Свойства/properties) + Блокировки + Эффективность клиент-серверного обмена + Эффективность хранения двоичных файлов + Эффективность создания ветвей и меток + Эффективность использования памяти сервера 45 / 47
  • 46. TortoiseSVN Лучшие клиенты под Windows! Сейчас ознакомимся на практике! 46 / 47
  • 47. СПАСИБО ЗА ВНИМАНИЕ. ВАШИ ВОПРОСЫ? 47 / 47