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
15. Глоссарий централизованных СУВ
repository Хранилище документов — место, где система
управления версиями хранит все документы вместе с
историей их изменения и другой служебной
информацией.
revision Версия документа. СУВ различают версии по
номерам/меткам, которые назначаются
автоматически.
workspace Рабочая/локальная копия документов (working copy ).
15 / 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
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
40. «Diff»
«diff» – известная UNIX-утилита для сравнения текстовых
файлов
Команда всех СУВ, показывающая разницу между версиями.
40 / 47
41. «Blame»/«Annotate»/«Praise»
Позволяет видеть кто и когда отредактировал каждую
строчку.
Позволяет найти виновного за баг.
Эффективно использовать совместно с «diff» и историей
изменений.
41 / 47
42. Ветки и метки
branch Ветки — параллельные процессы эволюции кода.
Одинаковая историю до точки ветвления и разная —
после неё. Например, удобно держать отдельные
ветки для учета багов в выпущенных версиях или
проверки экспериментальных идей. Сливают ветки
между собой, или с основным стволом разработки.
tag Метка — символическое имя для группы
ревизий/документов.
42 / 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