Презентация по VCS

Материал из YourcmcWiki
Версия от 01:51, 1 июля 2012; VitaliyFilippov (обсуждение | вклад) (Пример ветвления — Feature Branches)

Перейти к: навигация, поиск
Автор

Виталий Филиппов
Дополнительный нижний колонтитул

Системы контроля версий
  • Практика
    • Feature Branch
    • SVN
    • Mercurial
    • Git

Контроль версий @@

Зачем?

  • История на случай утери кода
    (или, скажем, инфицирования)
  • Неблокирующие совместные правки
  • Code review
  • Поддержка старых версий

Локальные VCS @@

Простейший вариант — архивы или папочки со старыми версиями.
(не надо так делать)

SCCS (1972), RCS (1985).

[svg]

Diff, patch @@

Diff-screenshot.png

Централизованные VCS @@

  • История версий хранится на центральном сервере
  • Рабочие копии создаются на компьютерах разработчиков

CVS (1990), Subversion (2000).

Распределённые VCS @@

  • Каждая копия содержит всю историю ревизий
  • Возможен обмен между любыми участниками
  • Лёгкость ветвления и слияния

TLA (2001); Monotone, Darcs (2003); Git, Mercurial (2005); Bazaar (2007).

[svg]

Пример ветвления — Feature Branches @@

Смысл: каждая доработка в отдельной ветке.

TN-IShop-Revision-Graph.svg

Дерево доверия @@

Можно понимать как репозитории, можно — как ветки.

[svg]

Эмуляция централизации @@

Можно работать с DVCS, почти* как с централизованной!

[svg]


* Вынеся за скобки отсутствие пофайловости.

История VCS @@

…по большей части свободных.

[svg]

История Git и Hg @@

Tux.svg
  • В 2000—2005 для ядра Linux использовался BitKeeper
  • Анекдотичный «реверс-инжиниринг» привёл к отзыву бесплатной лицензии
  • Monotone уже был, но дико медленный

Терминология @@

Ревизия
одна версия проекта или файла.
Метка, тег (tag)
символьное имя какой-либо версии проекта.
Ветка (branch)
почти то же самое, но ей метится множество версий.
trunk (svn), HEAD (cvs), master (git), mainline (bazaar)
основная ветка.
Репозиторий
хранилище версий.
Рабочая копия, work copy
копия проекта, привязанная к какому-то репозиторию.
Коммит, фиксация, checkin, commit
отправка изменений в репозиторий.
Чекаут (checkout)
получение версии из репозитория.
Конфликты
внесённые в одну версию разные изменения одних и тех же частей кода.
Патч
различия между файлами, пригодные к применению в автоматическом режиме.