Введение в subversion

47
Subversion: Введение Стас Фомин, [email protected] Заказные ИнформСистемы 31 марта 2009 г. 1 / 47

Upload: stas-fomin

Post on 16-Jun-2015

2.307 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Введение в Subversion

Subversion: Введение

Стас Фомин, [email protected]

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

31 марта 2009 г.

1 / 47

Page 2: Введение в Subversion

План лекции

2 / 47

Page 3: Введение в Subversion

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

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

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

3 / 47

Page 4: Введение в Subversion

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

4 / 47

Page 5: Введение в Subversion

5 / 47

Page 6: Введение в Subversion

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

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

Что делать?

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

6 / 47

Page 7: Введение в Subversion

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

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

Что делать?

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

7 / 47

Page 8: Введение в Subversion

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

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

Что делать?

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

8 / 47

Page 9: Введение в Subversion

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

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

LINUXLINUXLINUX

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

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

Page 10: Введение в Subversion

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

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

LINUXLINUXLINUX

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

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

Page 11: Введение в Subversion

SCM/Software Configuration Management

Управление конфигурациямиФормальная и инструментальная систематизация управленияизменениями в информационной системе, включая:

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

11 / 47

Page 12: Введение в Subversion

SCM/Software Configuration Management

Конфигурационное

управление

контроль

исходного кода

учет

требований/ошибок

ведение

документации

архивирование

управление

сборками

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

работа

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

поддержка

процессов разработки 12 / 47

Page 13: Введение в Subversion

Version Control System/Revision Control System

Система управления версиямиПО для работы с изменяемыми информационными объектами:

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

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

13 / 47

Page 14: Введение в Subversion

Типы СУВ

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

I Централизованные;I Распределенные.

14 / 47

Page 15: Введение в Subversion

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

repository Хранилище документов — место, где системауправления версиями хранит все документы вместе систорией их изменения и другой служебнойинформацией.

revision Версия документа. СУВ различают версии пономерам/меткам, которые назначаютсяавтоматически.

workspace Рабочая/локальная копия документов (working copy).

15 / 47

Page 16: Введение в Subversion

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

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

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

Рабочая станция «C» (Mac OS)

Репозиторий

Repository

Workspace 1: c:\projects\supercode

Workspace 2: c:\projects\bugfixes

Workspace 3: c:\projects\experimental

Workspace 4: /usr/share/supercode

Workspace 5: /usr/share/test-supercode

Workspace 6 16 / 47

Page 17: Введение в Subversion

История управления конфигурациями

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

Page 18: Введение в Subversion

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

SCCS:Source Code Control System:1972

RCS:Revision Control System:1980

SVN:Subversion:2001

CVS:Concurrent Versions System:1985

18 / 47

Page 19: Введение в Subversion

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

SVN:2000

CVS:1985

CVSNT:1998

DCVS:2002-2005

OpenCVS:2006

Bazaar:2004

BitKeeper:2001

GIT:2006 (Linux here!)

Mercurial:2005

Monotone:200x

ArX:2003-2005arch:2001-2007

Darcs:2003-2007

SCCS:1972 RCS:1980

PRCS:1985-199x

OpenRCS:2006

19 / 47

Page 20: Введение в Subversion

Subversion — венец централизованных СУВ

The Forrester WaveTM: Software Change And ConfigurationManagement, Q2 2007 IBM Is The Unified SCCM Front-Runner,Subversion Leads On Standalone SCM.

Source: Forrester Research, Inc.

Go online to download

the Forrester Wave tool

for more detailed product

evaluations, feature

comparisons, and

customizable rankings.

RiskysredaeLsrednetnoCsteB

StrongPerformers

StrategyWeak Strong

Currento�ering

Weak

Strong

Market presence

Full vendor participation

Incomplete vendor participation

Subversion

IBM

BorlandSoftwareSerena Dimensions

MicrosoftAccuRev

CA Telelogic

MKSPerforce

Serena PVCS

41388 20 / 47

Page 21: Введение в Subversion

Subversion: история

2000 CollabNet, Inc: запуск проекта «наследник CVS».2001 Subversion стал хранится под Subversion.2004 Релиз 1.0.2005 Релиз 1.2. Возможность блокировки (поддержка

WebDAV/DeltaV).2008 Релиз 1.5. Отслеживание слияний.2009 Релиз 1.6. Определение «Конфликтов файловой

структуры»

21 / 47

Page 22: Введение в Subversion

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

SVNRepositoryRevision n

BranchesRevision 1

TagsRevision 2

TrunkRevision 3

File ARevision 8

File ARevision 7

File ARevision 6

File BRevision 6

File BRevision 5

SVN3D-Tree

22 / 47

Page 23: Введение в Subversion

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

23 / 47

Page 24: Введение в Subversion

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

24 / 47

Page 25: Введение в Subversion

Репозитарий Subversion

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

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

25 / 47

Page 26: Введение в Subversion

Базовые операции

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

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

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

Помните!«Копирование-Изменение-Слияние» на порядок эффективнеймодели «Блокирование-Изменение-Разблокирование»! 26 / 47

Page 27: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

27 / 47

0

Page 28: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

28 / 47

Cover.svg

0

Page 29: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

29 / 47

kyle> svn add Cover.svgA Cover.svg

Cover.svg

0

Page 30: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

30 / 47

kyle> svn commit

Cover.svg

0

Page 31: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

31 / 47

kyle> svn commitCompleted At revision 1

Cover.svg

Cover.svg@1

1

Page 32: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

32 / 47

kyle> svn add Chapter-1.txtA Chapter-1.txtkyle> svn commit Chapter-1.txt

Cover.svg

[email protected]

12

Page 33: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

33 / 47

kyle> svn add Chapter-1.txtA Chapter-1.txtkyle> svn commit Chapter-1.txtCompleted At revision 13

Cover.svgChapter-1.txt

[email protected]@13

13

Page 34: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

34 / 47

stan> svn checkout ...U Cover.svgU Chapter-1.txtCompleted At revision 13

Cover.svgChapter-1.txt

[email protected]@13

[email protected]@13

13

Page 35: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

35 / 47

kyle> svn commitsvn: Commit failed:svn: Your file or directory’Chapter-1.txt’ isprobably out-of-date

Cover.svgChapter-1.txt

[email protected]@21

[email protected]@13

21

Page 36: Введение в Subversion

Базовые события

merge Слияние — объединение независимых изменений вединую версию документа.

conflict Конфликт — ситуация, когда несколькопользователей сделали изменения одного и того жеучастка документа.

Конфликт обнаруживается, когда один пользователь опубликовалсвои изменения, а второй пытается опубликовать и система самане может корректно слить конфликтующие изменения.

Маркеры конфликта:

<<<<<<< .mineИ опыт, сын ашипок трудных, и гений, парадоксов друг=======И опыт, сын ошибок трудных, и гений, породоксов друг>>>>>>> .r12 36 / 47

Page 37: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

37 / 47

kyle> svn updateG Chapter-1.txtUpdated to revision 21.

Cover.svgChapter-1.txt

[email protected]@21

[email protected]@21

21

Page 38: Введение в Subversion

LINUXLINUXLINUX

0420

0435

043F

043E

0437

0438

0442

043E

0440

0438

0439

LINUXLINUXLINUX

LINUXLINUXLINUX

Репозиторий

38 / 47

kyle> svn updateC Chapter-1.txtUpdated to revision 21.

Cover.svgChapter-1.txt

[email protected]@21

Chapter-1.txt@21Chapter-1.txt.mineChapter-1.txt.r12Chapter-1.txt.r21

21

Page 39: Введение в Subversion

«Status»

\sandbox\trunk\articles>svn status -v? e

4 4 teacher .9 9 teacher article-1.txt

10 10 student16 article-2.txt

39 / 47

Page 40: Введение в Subversion

«Diff»

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

40 / 47

Page 41: Введение в Subversion

«Blame»/«Annotate»/«Praise»

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

41 / 47

Page 42: Введение в Subversion

Ветки и метки

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

tag Метка — символическое имя для группыревизий/документов.

42 / 47

Page 43: Введение в Subversion

Ветки и метки в Subversion

Их нет!

43 / 47

Page 44: Введение в Subversion

Ветки и метки в Subversion

Но есть «джентельменское соглашение о структуре каталогов»:

/branches/tags/trunk

В случае нескольких проектов в одном репозитории:

/project1/branches/tags/trunk

/project2/branches/tags/trunk

44 / 47

Page 45: Введение в Subversion

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

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

45 / 47

Page 46: Введение в Subversion

TortoiseSVN

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

Сейчас ознакомимся на практике!46 / 47

Page 47: Введение в Subversion

СПАСИБО ЗА ВНИМАНИЕ.

ВАШИ ВОПРОСЫ?

47 / 47