Система керування версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Система керування версіями (СКВ; source code management(SCM)[джерело?], revision control[джерело?], source control[джерело?], version control system[джерело?]) — програмний інструмент для керування версіями одиниці інформації: початкового коду програми, скрипту, вебсторінки, вебсайту, 3D-моделі, текстового документу тощо.

Система керування версіями — інструмент, який дозволяє одночасно, не заважаючи один одному, проводити роботу над груповими проєктами.

Системи керування версіями зазвичай використовуються при розробці програмного забезпечення для відстеження, документування та контролю над поступовими змінами в електронних документах: у сирцевому коді застосунків, кресленнях, електронних моделях та інших документах, над змінами яких одночасно працюють декілька людей.

Кожна версія позначається унікальною цифрою чи літерою, зміни документу занотовуються. Зазвичай також зберігаються дані про автора зробленої зміни та її час.

Інструменти для контролю версій входять до складу багатьох інтегрованих середовищ розробки.

Існують два основні типи систем керування версіями: з централізованим сховищем та розподіленим.

Система збереження історії редагувань статей, що застосовується у Вікіпедії є прикладом системи керування версіями.

Загальні відомості

[ред. | ред. код]

Система контролю дозволяє зберігати попередні версії файлів та завантажувати їх за потребою. Вона зберігає повну інформацію про версію кожного з файлів, а також повну структуру проєкту на всіх стадіях розробки. Місце зберігання даних файлів називають репозиторієм. В середині кожного з репозиторіїв можуть бути створені паралельні лінії розробки — гілки.

Гілки зазвичай використовують для зберігання експериментальних, незавершених(alpha, beta) та повністю робочих версій проєкту(final).

Більшість систем контролю версії дозволяють кожному з об'єктів присвоювати теги, за допомогою яких можна формувати нові гілки та репозиторії.

Використання системи контролю версії є необхідним для роботи над великими проєктами, над якими одночасно працює велика кількість розробників. Системи контролю версії надають ряд додаткових можливостей:

  • Можливість створення різних варіантів одного документу;
  • Документування всіх змін (коли ким було змінено/додано, хто який рядок змінив);
  • Реалізує функцію контролю доступу користувачів до файлів. Є можливість його обмеження;
  • Дозволяє створювати документацію проєкту з поетапним записом змін в залежності від версії;
  • Дозволяє давати пояснення до змін та документувати їх;

Невеликий словник основних термінів-сленгів

[ред. | ред. код]
  • Транк (trunk) — основна гілка коду
  • Бранч (branch) — відгалуження
  • Чекін (Check in (submit, commit)) — відправлення коду в репозиторій
  • Чекаут (Check out) — одержання зміни з репозиторію
  • Конфлікти — виникають, коли кілька людей правлять один і той же код, конфлікти можна вирішувати
  • Патч — шматок з записаними змінами, які можна застосувати до сховища з кодом

Світовий досвід

[ред. | ред. код]

На сьогодні у світі існує багато організацій, які використовують системи контролю версій у своїй повсякденній роботі. Практично кожна фірма, що виробляє програмне забезпечення використовує їх. Але крім комерційних організацій системи контролю версій використовуються в університетах у всьому світі. Так, наприклад, можна виділити статтю двох професорів університету в Торонто: Грегорі В. Вілсона і Карен Рейд[1]. У своєму новому проєкті вони намагаються створити середовище для студентів, в якому вони хочуть використати системи контролю версій, issue trackers, web-логи.

Деякі університети прагнуть використовувати і створювати такі середовища, в яких усі студенти технічних спеціальностей змогли б мати систему контролю версій, web-логи та інше. У США департамент освіти також займається цим питанням. Впровадження подібних систем відбувається на державному рівні.

Види систем контролю версії

[ред. | ред. код]

Централізовані системи контролю версій

[ред. | ред. код]

Централізована система контролю версії (клієнт-серверна) — система, дані в якій зберігаються в єдиному «серверному» сховищі. Весь обмін файлами відбувається з використанням центрального сервера. Є можливість створення та роботи з локальними репозиторіями (робочими копіями).

Переваги:

  • загальна нумерація версій;
  • дані знаходяться на одному сервері;
  • можлива реалізація функції блокування файлів;
  • можливість керування доступом до файлів;

Недоліки:

  • оновлення робочої копії та збереження змін можливе лише за наявності мережевого з'єднання з основним сервером.

До таких систем відносять Subversion, Concurrent Versions System, Team Foundation Server.

Розподілені системи контролю версії

[ред. | ред. код]

Розподілена система контролю версії (англ. Distributed Version Control System, DVCS) — система, яка використовує замість моделі клієнт-сервер, розподілену модель зберігання файлів. Така система не потребує сервера, адже всі файли знаходяться на кожному з комп'ютерів.

Переваги:

  • Кожний з розробників працює зі своїм власним репозиторієм;
  • Рішення щодо злиття гілок приймається керівником проєкту;
  • Немає потреби в мережевому з'єднанні;

Недоліки:

  • не можливо контролювати доступ до файлів;
  • відсутня загальна нумерація версій файлів;
  • потрібно значно більше дискового простору на сервері для зберігання всіх гілок як глобальних, так й локальних;
  • відсутня можливість блокування файлів.

До розподілених систем відносять: Git, Mercurial, Bazaar, Monotone, Codeville, BitKeeper.

Виникнення конфліктів та їх вирішення

[ред. | ред. код]

Конфлікти можуть виникнути при операції злиття, розгалужені від різних джерел. При зміненні одного і того ж рядка різними користувачами виникає конфлікт. Тобто якщо один користувач внесе зміни в документ та виконає злиття — то конфлікту не буде. Але якщо після цього інший користувач змінить документ в тих же рядках, що і перший — то виникне конфлікт. В такому випадку конфлікт повинен вирішувати другий користувач (власне, через якого і виник конфлікт), або система (як правило, вирішення конфліктів покладається на користувачів).

Вирішення конфліктів

Ручний режим:

  • Шляхом ручних змін конфліктних рядків.
  • Примусовий запис своєї версії поверх попередньої (зафіксованої).

Автоматичний режим:

  • Ординальна заміна. Схожа на примусовий запис, але відрізняється тим, що кожен користувач має свій пріоритет. Записуються зміни того в кого пріоритет вище.

Зауваження. Але далеко не в кожній системі існує пріоритет користувачів.

Поширені системи керування версіями

[ред. | ред. код]

Див. також

[ред. | ред. код]

Примітки

[ред. | ред. код]
  1. Вілсон, Грегорі; Рейд, Карен (2005). Learning by doing: introducing version control as a way to manage student assignments (PDF) (англійською) . Нью-Йорк: ACM. с. 272—276. doi:10.1145/1047344.1047441. ISBN 1-58113-997-7.

Джерела

[ред. | ред. код]