Система керування версіями (Version Control System) - Програмне забезпечення, призначене для організації роботи з мінливих інформацією.
Найчастіше системи управління версіями використовуються при створенні програмних проектів, але реально їх сфера застосування набагато ширше. Вони можуть виступати в ролі інструменту для роботи з будь-якими даними, т.к. забезпечують зберігання різних версій файлів, а також дозволяють виконувати різні операції з ними.
Серед базових функціональних можливостей, що надаються різними системами управління версіями, можна відзначити наступні:
- Зберігання версій файлів. Більшість систем управління версіями забезпечує зберігання даних в центральному репозиторії (сховище). Обов'язки управління репозиторієм зазвичай покладається на системних адміністраторів. Оскільки в цьому випадку настройки сховища та створення резервних копій проводиться кваліфікованими фахівцями, надійність зберігання даних підвищується.
- Фіксація змін стану файлу. Команда фіксації змін (commit) передає зміни, зроблені розробником, в репозиторій і позначає новий стан файлу як чергову його версію.
- Відновлення будь-якої версії файлу. Цю можливість, напевно, варто визнати найголовнішою. Розробник може як завгодно змінювати вміст файлу-за умови своєчасної фіксації версій і, звичайно ж, при належному адмініструванні репозиторію, файл можна без зусиль повернути до будь-якого із зафіксованих раніше станів. Іншими словами, жодна з попередніх версій пропасти не може.
- Створення гілок у складі проекту. У ряді випадків виникає необхідність, починаючи з деякої версії файлу, вносити дві незалежних один від одного послідовності змін. Зробити це дозволяє механізм розгалуження. Користувач має можливість на якомусь етапі роботи з файлом, створити нову гілку, після чого зміни в основний і новоствореної гілки можуть вноситися незалежно один від одного. Як правило, нова гілка створюється не для одного файлу, а для проекту - в даному випадку поддерева каталогів з файлами.
- Інтеграція (злиття) даних з різних гілок проекту. На якомусь етапі роботи з різними гілками проекту можна виконати злиття даних у файлі - об'єднання змін, незалежно внесених різними розробниками в різних гілках.
- Блокування. Один з розробників має можливість захопити в монопольне використання файл або групу файлів для внесення в них змін.
- Вирішення конфліктів. Можлива ситуація, коли два розробника вносять зміни в один і той же файл. Той з них, хто перший зафіксує зміни (виконає команду commit), зможе зробити це без проблем. Той, розробник, який зафіксує зміни другим, отримає повідомлення про конфлікт, в даному випадку про те, що його зміни виконані не на базі останньої, а на базі передостанньої версії файлу. У такій ситуації необхідно об'єднати результати роботи двох розробників. Конфлікт також може виникнути і при інтеграції вмісту файлів з різних гілок проекту. Незалежно від причини конфліктів, системи управління версіями надають засоби автоматичного їх дозволу. Однак, слід зауважити, що дані кошти як правило, малоефективні і вирішувати конфлікти в більшості випадків доводиться вручну, а роль автоматичних засобів зводиться до подання конфліктуючих фрагментів коду в зручному для розробника вигляді.
Базові функціональні можливості в різних системах управління версіями реалізовані по-різному. Крім того, різні системи надають додаткові можливості для роботи з версіями. Більш детальну інформацію можна отримати з керівництва по конкретному продукту.
Кілька прикладів з великого списку продуктів - систем управління версіями: Concurrent Versions System (CVS), Subversion (SVN), Razor, BitKeeper, Git.
Джерела: