Upload
stas-fomin
View
2.307
Download
0
Embed Size (px)
Citation preview
План лекции
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 строк?
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
Проблемы разработки ПО: Сценарий 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
SCM/Software Configuration Management
Управление конфигурациямиФормальная и инструментальная систематизация управленияизменениями в информационной системе, включая:
программные продукты;информационные модели и иные артефакты (например,электронные документы);«железо»;средства аудита самой системы;метрики работы системы (логи, журналы, архивы).
11 / 47
SCM/Software Configuration Management
Конфигурационное
управление
контроль
исходного кода
учет
требований/ошибок
ведение
документации
архивирование
управление
сборками
учет окружения
работа
команд/групп
поддержка
процессов разработки 12 / 47
Version Control System/Revision Control System
Система управления версиямиПО для работы с изменяемыми информационными объектами:
хранение версий программных артефактов:I программных кодов;I документов и документации в целом;I моделей САПР.
мгновенный доступ к любой версии;обеспечение совместной работы команды.
13 / 47
Типы СУВ
Однопользовательские (Локальные)Многопользовательские:
I Централизованные;I Распределенные.
14 / 47
Глоссарий централизованных СУВ
repository Хранилище документов — место, где системауправления версиями хранит все документы вместе систорией их изменения и другой служебнойинформацией.
revision Версия документа. СУВ различают версии пономерам/меткам, которые назначаютсяавтоматически.
workspace Рабочая/локальная копия документов (working copy).
15 / 47
Централизованные СУВ: 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
История управления конфигурациями
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
SVN:Subversion:2001
CVS:Concurrent Versions System:1985
18 / 47
Эволюция систем контроля версий
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
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
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
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
«двумерный» репозиторий Subversion
23 / 47
Ревизии: «Стержневые» и «Оперативные»
24 / 47
Репозитарий Subversion
Экономия: храняться только изменения между версиями. Какдля текстовых, так и для бинарных файлов.
СоветСтарайтесь хранить в репозитарии только текстовые файлы!Бинарные файлы получайте с помощью систем сборки.
25 / 47
Базовые операции
checkout Извлечение документа из хранилища и созданиерабочей копии.Возможно заказать определенные версий файловили наборов файлов.
update Обновление рабочей копии из репозитория.Можно переключится на другие версии файлов.
commit Создание новой версии, публикация изменений.Распространение изменений, сделанных в рабочейкопии, на хранилище документов. При этом вхранилище создаётся новая версия изменённыхдокументов.
Помните!«Копирование-Изменение-Слияние» на порядок эффективнеймодели «Блокирование-Изменение-Разблокирование»! 26 / 47
LINUXLINUXLINUX
0420
0435
043F
043E
0437
0438
0442
043E
0440
0438
0439
LINUXLINUXLINUX
LINUXLINUXLINUX
Репозиторий
27 / 47
0
LINUXLINUXLINUX
0420
0435
043F
043E
0437
0438
0442
043E
0440
0438
0439
LINUXLINUXLINUX
LINUXLINUXLINUX
Репозиторий
28 / 47
Cover.svg
0
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
LINUXLINUXLINUX
0420
0435
043F
043E
0437
0438
0442
043E
0440
0438
0439
LINUXLINUXLINUX
LINUXLINUXLINUX
Репозиторий
30 / 47
kyle> svn commit
Cover.svg
0
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
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
12
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
13
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
13
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
21
Базовые события
merge Слияние — объединение независимых изменений вединую версию документа.
conflict Конфликт — ситуация, когда несколькопользователей сделали изменения одного и того жеучастка документа.
Конфликт обнаруживается, когда один пользователь опубликовалсвои изменения, а второй пытается опубликовать и система самане может корректно слить конфликтующие изменения.
Маркеры конфликта:
<<<<<<< .mineИ опыт, сын ашипок трудных, и гений, парадоксов друг=======И опыт, сын ошибок трудных, и гений, породоксов друг>>>>>>> .r12 36 / 47
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
21
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
Chapter-1.txt@21Chapter-1.txt.mineChapter-1.txt.r12Chapter-1.txt.r21
21
«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
«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