Системы контроля версий (Version Control Systems) МАИ, каф. 806, Гаврилов Евгений (eugavrilov at gmail.com) Проблемы Работать вместе над одним кодом • Решение: единый репозиторий Хранить историю изменений • Решение: хранить все изменения файлов в репозитории Разрабатывать параллельные версии программы • Решение: ветки и теги репозитория Цикл работы с VCS (Subversion) 0. Checkout: cоздание локальной копии [1 раз] Репозиторий 1. Редактирование файлов локальной копии 2. Update: обновление локальной копии из репозитория Репозиторий 2.1. Разрешение конфликтов (если в репозитории изменился тот же файл) 3. Commit: фиксирование изменений в репозиторий Репозиторий Одновременный доступ • Пессимистическая блокировка – MS Visual Source Safe, Subversion Locks • Оптимистическая блокировка – Merge (слияние изменений) – Unified Diff (формат хранения изменений) Атомарный Commit Commit – аналог транзакции – Atomicity: все, или ничего Repository – Consistency: ??? – Isolation: ??? – Durability: откат изменений невозможен Advanced: trunk, tags, branches • Trunk – основная ветка разработки кода • Тег (tag): именованная метка на код в репозитории на определенный момент времени (snapshot) • Бранч (branch): копия кода в репозитории, предназначенная для параллельной работы над несколькими версиями системы. Advanced: Branches • Для исправления ошибок в текущей версии системы (после code freeze), при параллельной разработки следующей версии Release 1 – исправление ошибок Code freeze merge Trunk – основная разработка • Для экспериментов над кодом текущей версии Create copy Experimental branch merge Trunk – основная разработка Final back merge Системы контроля версий • CVS (бесплатный, очень популярный) • Subversion (OpenSource, простой, активно развивается, заменяет CVS) • Perforce (коммерческий, наиболее мощный) • MS Visual Source Safe (коммерческий, интеграция с MS) • Microsoft TeamFS (коммерческий, интеграция с MS, заменяет MS Source Safe) • Borland StarTeam • GIT / Mercurial • TortoiseSVN – клиент windows для SVN