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

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

Система керування версіями (англ. source code management, SCM) — програмний інструмент для керування версіями одиниці інформації: вихідного коду програми, скрипту, веб-сторінки, веб-сайту, 3D моделі, текстового документу тощо.

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

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

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

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

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

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

Загальні відомості[ред.ред. код]

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

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

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

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

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

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

Світовий досвід[ред.ред. код]

На сьогодні у світі існує безліч організацій, які використовують системи контролю версій у своїй повсякденній роботі. Практично кожна фірма, що виробляє програмне забезпечення використовує їх. Але крім комерційних організацій системи контролю версій використовуються в університетах у всьому світі. Так наприклад можна виділити статтю двох професорів університету в Торонто: Gregory V. Wilson і Karen Reid. У своєму новому проекті вони намагаються створити середовище для студентів, в якому вони хочуть використати системи контролю версій, issue trackers, web-логи. Це не поодинокий випадок. Деякі університети прагнуть використовувати і створювати такі середовища, в яких усі студенти технічних спеціальностей змогли б мати систему контролю версій, web-логи та інше. Цікаво також, що в США департамент освіти також займається цим питанням. Впровадження подібних систем відбувається на державному рівні.

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

Централізовані системи контролю версії[ред.ред. код]

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

Переваги:

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

Недоліки:

  • Потреба в мережевому з'єднанні для оновлення робочої копії чи збереження змін;

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

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

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

Переваги:

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

Недоліки:

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

До таких систем відносять Git, Mercurial, SVK, Monotone, Codeville, BitKeeper.

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

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

Вирішення конфліктів
Ручний режим:

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

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

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

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

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

Джерела[ред.ред. код]

Див. також[ред.ред. код]

Посилання[ред.ред. код]