Презентация по VCS
Материал из YourcmcWiki
- Практика
- Feature Branch
- SVN
- Mercurial
- Git
Содержание
Контроль версий
Зачем?
- История на случай утери кода
(или, скажем, инфицирования) - Неблокирующие совместные правки
- Code review
- Поддержка старых версий
Локальные VCS
Простейший вариант — архивы или папочки со старыми версиями.
(не надо так делать)
SCCS (1972), RCS (1985).
Diff, patch
- diff (1970) — подсчёт разницы между текстовыми файлами
- patch (1984) — применение этих разниц — патчей
- Автор — Лэрри Уолл (он же создатель Perl’а)
Централизованные VCS
- История версий хранится на центральном сервере
- Рабочие копии создаются на компьютерах разработчиков
CVS (1990), Subversion (2000).
Распределённые VCS
- Каждая копия содержит всю историю ревизий
- Возможен обмен между любыми участниками
- Лёгкость ветвления и слияния
TLA (2001); Monotone, Darcs (2003); Git, Mercurial (2005); Bazaar (2007).
Пример ветвления — Feature Branches
Смысл: каждая доработка в отдельной ветке.
Дерево доверия
Можно понимать как репозитории, можно — как ветки.
Эмуляция централизации
Можно работать с DVCS, как с централизованной!
История VCS
…по большей части свободных.
История Git и Hg
- В 2000—2005 для ядра Linux использовался BitKeeper
- Анекдотичный «реверс-инжиниринг» привёл к отзыву бесплатной лицензии
- Monotone уже был, но дико медленный
Терминология
- Ревизия
- одна версия проекта или файла.
- Метка, тег (tag)
- символьное имя какой-либо версии проекта.
- Ветка (branch)
- почти то же самое, но ей метится множество версий.
- trunk (svn), HEAD (cvs), master (git), mainline (bazaar)
- основная ветка.
- Репозиторий
- хранилище версий.
- Рабочая копия, work copy
- копия проекта, привязанная к какому-то репозиторию.
- Коммит, фиксация, checkin, commit
- отправка изменений в репозиторий.
- Чекаут (checkout)
- получение версии из репозитория.
- Конфликты
- внесённые в одну версию разные изменения одних и тех же частей кода.
- Патч
- различия между файлами, пригодные к применению в автоматическом режиме.