CVS

CVS (Concurrent Versions System, "Система одночасно Версій") - програмний продукт, що відноситься до розряду систем керування версіями ( англ. version control system ). Зберігає історію змін певного набору файлів, як правило, вихідного коду програмного забезпечення, і полегшує спільну роботу групи людей (часто - програмістів) над одним проектом. CVS популярна в світі відкритого ПЗ. Система поширюється на умовах ліцензії GNU GPL.

В даний час активна розробка системи припинена (остання версія випущена в травні 2008), у вихідний код вносяться тільки невеликі виправлення [2].

Деякі джерела вважають CVS застарілої [3] [4] [5] системою, тому що CVS має ряд недоліків, і є більш молоді альтернативні системи управління версіями (наприклад, Subversion або Git), вільні від більшості недоліків CVS.


1. Основні концепції

CVS використовує архітектуру клієнт-сервер. Зазвичай клієнт і сервер з'єднуються через локальну мережу або через Інтернет, але можуть працювати і на одній машині, якщо необхідно вести історію версій локального проекту. Серверне ПЗ зазвичай працює під управлінням Unix (хоча існує CVS сервер і для Windows NT), тоді як CVS клієнти доступні у всіх популярних операційних системах.

Сервер зберігає в спеціальному сховищі ( репозиторії) поточну версію (версії) проекту і історію змін, а клієнт з'єднується з ним, щоб отримати потрібну йому версію або записати нову. Отримавши з сервера потрібну версію (дана процедура називається check-out), клієнт створює локальну копію проекту (або його частини) - так звану робочу копію. Після того як у файли, що знаходяться в робочій копії, внесено необхідні зміни, вони пересилаються на сервер (check-in).

Кілька клієнтів можуть працювати над копіями проекту одночасно. Коли вони відправляють результати, сервер намагається злити їх зміни в репозиторії разом. Якщо це не вдається, наприклад, у випадку, коли два клієнти змінили одні й ті ж рядки в певному файлі, сервер не прийме зміни від останньої check-in операції і повідомить клієнтові про конфлікт, який має бути виправлений вручну. Якщо check-in операція завершилася успішно, то номери версій всіх порушених файлів автоматично збільшуються, і сервер записує коментар, дату та ім'я користувача в свій журнал (data logging).

Клієнти також можуть порівняти різні версії файлів, запросити повну історію змін або отримати історичний образ проекту на визначене число чи за номером ревізії. Багато Open Source -проекти дозволяють анонімний доступ на читання, який вперше був застосований в OpenBSD. Це означає, що клієнти можуть запитувати і порівнювати версії файлів без пароля; тільки check-in-операції, що ведуть до зміни даних в репозиторії, вимагають пароль.

Також для синхронізації локальної копії проекту з інформацією на сервері клієнти можуть використовувати команду update, що дозволяє уникнути повторного скачування всього проекту.

CVS також може містити різні гілки проекту. Наприклад, стабільна версія проекту може становити одну гілку (branch), в яку вносяться тільки виправлення помилок, тоді як активна розробка може вестися в паралельній гілці, яка включає значні поліпшення або зміни з моменту виходу стабільної версії.

CVS використовує механізм дельта-компресії для ефективного зберігання різних версій одного і того ж файлу.


2. Термінологія

Проекти в CVS зберігаються у вигляді модулів. Модуль - це набір файлів проекту. Сервер CVS може обслуговувати кілька модулів; всі модулі зберігаються в репозиторії. Локальна копія модуля, отримана за допомогою CVS клієнта, називається робочою копією.

Check-out
витяг цілого модуля з CVS і створення робочої копії.
Check-in
фіксація локальних змін в репозиторій.
Update
оновлення локального проекту з CVS.
Branch
"Гілка" - незалежне напрямок модифікації проекту, яке може містити ряд послідовних версій. "Гілка" може розвиватися паралельно іншим гілкам. Головна гілка є завжди.
Main trunk або HEAD
головна гілка.
Revision
"Ревізія": одна з версій окремого файлу.
Release
"Реліз": одна з версій цілого проекту. Термін "версія" взагалі не використовується.
Tag ("тег")
спеціальна мітка, що позначає певний реліз продукту. Текст мітки бажано робити максимально зрозумілим. Мітку можна призначити і окремого файлу, але особливого сенсу в цьому немає. Тег позначає сукупність файлів певних ревізій (версій).

3. Історія та статус

CVS є розвитком більш ранньої системи управління версіями, що має назву Revision Control System (RCS), яка все ще використовується для роботи з окремими файлами, але не цілими проектами. Дік Грун привів [6] короткі історичні відомості про CVS на своїй сторінці. Вільний переклад частини тексту:

CVS був створений для того, щоб мати можливість роботи з двома моїми студентами над C компілятором ACK (Amsterdam Compiler Kit). У нас трьох був майже несумісний з часу графік (один студент мав постійне місце роботи, другий з'являвся нерегулярно, а я міг працювати над проектом лише по вечорах). Їх проект тривав з липня 1984 по серпень 1985. CVS спочатку називався cmt, з причини того, що він дозволив нам фіксувати версії незалежно (від англійського commit - фіксувати, робити).

Код вперше побачив світ у конференції mod.sources 23 червня 1986 годa.

Код, який врешті-решт придбав вид поточної версії CVS, був початий спільно з Брайаном Берлінером в квітні 1989 року, з наступними доповненнями від Джеффа Полиця та інших учасників. Брайан Берлінер написав [7] документ, що описує поліпшення програми CVS, які вона встигла придбати за час внутрішнього використання в Prisma - сторонніх розробників ядра SunOS, після чого Брайан випустив її на загальний огляд під ліцензією GPL.

На сьогоднішній день код CVS підтримує група добровольців. Цікавий той факт, що версія CVS для Microsoft Windows, що відокремилася в окремий проект CVSNT, зараз досить активно розширює можливості системи навіть портіруя зміни назад на UNIX під ім'ям CVSNT.

Ставлення CVS до проекту GNU може трактуватися неоднозначно: на одній сторінці сайт GNU поширює програму як "пакет GNU", а на іншій CVS знаходиться в розділі "інший проект під ліцензією GPL". На FTP-сервері програма знаходиться в директорії / non-gnu /.


4. Недоліки

  • Неможливо перейменувати файл або директорію так, щоб це зміна було відображено в історії.
  • Обмежена підтримка юникода і не- ASCII імен.
  • Публікації змін не атомарний.
  • Набори змін не підтримуються.
  • Неефективне зберігання бінарних файлів.
  • Оригінальний GNU CVS не підтримує розмежування прав між користувачами репозиторія

5. Інструменти

5.1. Веб-інтерфейси для перегляду репозиторія

5.2. Клієнти, графічні оболонки для роботи з CVS

5.2.1. Вільні / Open source

  • Кросплатформені
    • CVSGUI - набір CVS клієнтів для Windows, MacOS, Linux (WinCvs, MacCvs і gCvs, відповідно)
    • LinCVS - багатоплатформенна (Linux, інші Unix-like, Windows, Mac OS X) оболонка, написана з використанням бібліотеки Qt
    • Eclipse - багатоплатформовий IDE з вбудованою підтримкою CVS
    • TkCVS - багатоплатформенна (Linux, інші Unix-like, Windows, MacOS X) графічна оболонка, написана на скриптової мовою Tcl
    • NetBeans IDE - багатоплатформовий IDE з вбудованою підтримкою CVS
  • Microsoft Windows
    • TortoiseSVN - ймовірно найпростіший CVS клієнт для Windows
    • WinCVS
    • DevC + + - дуже популярна IDE c CVS клієнтом
  • Linux
    • Cervisia - (Qt) оболонка до CVS для середовища KDE
    • pharmacy - оболонка для середовища GNOME

5.2.2. Комерційні

  • CS-CVS CVS клієнт для Windows - безкоштовний для Open Source розробників
  • CVSNT
  • SmartCVS

5.3. Сервер CVS

5.4. Інші інструменти

  • Meld - інструмент для роботи зі змінами
  • StatCvs - статистика
  • BuildBot - допомагає в управлінні проектом; будує і тестує дерево при вступі на CVS нових змін
  • PushOK CVS SCC proxy - плагін для Microsoft SCC
  • boneclipse-cvsgrapher - плагін для Eclipse

Примітки

  1. CVS: Concurrent Versions System - www.ohloh.net / p / cvs
  2. [Sources] Log of / cvs / ccvs / ChangeLog - cvs.savannah.gnu.org / viewvc / cvs / ccvs / ChangeLog
  3. CVS is out, Subversion is in - www.redhat.com/magazine/010aug05/features/subversion/ (Англ.) Red Hat magazine, серпень 2005
  4. CVS - sourceforge
  5. CVS - система керування версіями - www.citforum.ru/programming/application/cvs/
  6. Concurrent Versions System CVS - www.cs.vu.nl/ ~ dick / CVS.html # History
  7. CiteSeerX - CVS II: Parallelizing Software Development - citeseer.ist.psu.edu/berliner90cvs.html