Subversion

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з Svn)
Перейти до навігації Перейти до пошуку
Subversion
Тип система керування версіями
Автор CollabNetd
Розробник

Apache Software Foundation

спільнота та розробники з CollabNet, Elego, VisualSVN
Перший випуск 20 жовтня 2000
Стабільний випуск 1.9 (5 серпня 2015; 8 років тому (2015-08-05))
Операційна система крос-платформовий
Мова програмування C
Ліцензія Apache License
Репозиторій svn.apache.org/repos/asf/subversion/trunk/
Вебсайт subversion.apache.org

Subversion[2] (з 2010 називається Apache Subversion)[3] — вільна система керування версіями.

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

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

Subversion — централізована система. Дані зберігаються в єдиному сховищі. При збереженні нових версій використовується дельта-компресія, тобто система знаходить відмінності нової версії від попередньої і записує тільки їх, уникаючи непотрібного дублювання даних. Сховище може розташовуватися на локальному диску або на мережевому сервері. До локального сховища клієнт Subversion звертається безпосередньо. Для доступу до віддаленого сервера може використовуватися власний мережевий протокол або стандартний протокол WebDAV, підтримуваний за допомогою спеціального модуля для вебсервера Apache.

Клієнти копіюють файли з сховища, створюючи локальні робочі копії, потім модифікують їх і публікують зміни в сховищі. Декілька клієнтів можуть одночасно звертатися до сховища. При використанні доступу за допомогою WebDAV також підтримується прозоре керування версіями — якщо будь-який клієнт WebDAV відкриває для запису і потім зберігає файл, що зберігається на мережевому ресурсі, то автоматично створюється нова версія.

Можливості[ред. | ред. код]

  • Зберігання повної історії змін відслідковуваних об'єктів (файлів, каталогів, символьних лінків) в централізованому сховищі (репозиторії), в тому числі при зміні атрибутів (метаданих), переміщенні, перейменуванні та видаленні
  • Копіювання об'єктів із розгалуженням історії — при копіюванні в сховище з'являються два окремих об'єкта зі спільною історією
  • Підтримка перенесення змін між копіями об'єктів, в тому числі повного злиття копій (в робочій копії; без об'єднання історії)
  • Підтримка розгалужень:
    • створення розгалужень (копіювання директорій) та роботи з ними
    • злиття розгалужень (перенесенням змін)
  • Підтримка міток (копіюванням директорій)
  • Історія змін і копії об'єктів (в тому числі розгалуження і мітки) зберігаються у вигляді зв'язаних різницевих копій — «дешевих» (таких, що не вимагають великих часових та дискових ресурсів) при створенні і зберіганні
  • Підтримка конкурентної (в тому числі одночасної, із ізоляцією транзакцій) багатокористувацької роботи зі сховищем та, в більшості випадків, автоматичним злиттям змін різних розробників (в робочій копії)
  • Фіксації змін в сховищі (в тому числі багатооб'єктні) організуються у вигляді атомарних транзакцій
  • Мережевий обмін між сервером і клієнтом передбачає передачу лише відмінностей між робочою копією та сховищем
  • Забезпечується однаково ефективна робота як із текстовими, так і з двійковими файлами
  • Різні варіанти доступу до сховища, в тому числі:
    • безпосередній доступ на локальній файловій системі;
    • по власному мережевому протоколу;
    • через вебсервер по протоколу WebDAV/DeltaV.
  • Вивід клієнта командного рядка однаково зручний і для читання, і для розбору програмами
  • Можливість дзеркалювання сховищ
  • Два можливих внутрішніх формати сховища (англ. repository): база даних або набір звичайних файлів
  • Інтернаціоналізація повідомлень програми (використовуються налаштування Локалі)
  • Бібліотеки для мов PHP, Python, Perl, Java дозволяють вбудовувати функціональність клієнта Subversion в програми, написані на цих мовах
  • Багаторівнева архітектура бібліотек, із початку розрахована на клієнт-серверну модель

Модель роботи[ред. | ред. код]

Subversion — централізована система (на відміну від розподілених систем, таких як Git або Mercurial), тобто дані зберігаються в єдиному сховищі. Сховище може розташовуватися на локальному диску або на мережевому сервері.

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

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

Нумерацію всіх версій svn робить сам, при svn commit номер версії всіх файлів проєкту збільшується на 1.

Структура директорій системи:

  • trunk — поточна робоча версія, що знаходиться у розробці. На відміну від релізу вона не стабільна, тобто знаходиться у розробці хоча й компілюється і запускається, не заважаючи іншим розробникам тестувати власний код.
  • branch — відгалуження від проєкту. Для порівняння готовий продукт, що пишеться в trunk, треба вдосконалити; припустимо, саме вдосконалення є складним і його реалізація може завадити іншим працювати. В деяких випадках коли реалізація певних частин програми займає багато часу, також створюють branch; у таких випадках назву branch дають таку ж як назва модуля, що розробляється. Як тільки розробка модуля буде завершена потрібно викликати процес вливання branch в trunk.
  • tags — ярлики для trunk у визначені моменти, іншими словами — релізи.

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

Типи репозиторіїв[ред. | ред. код]

Subversion пропонує два варіанти організації репозиторіїв. Репозиторії першого типу використовують для зберігання бази даних на основі Berkeley DB, репозиторії другого типу — звичайні файли спеціального формату (доступ до даних організується з допомогою власних бібліотек, без використання сторонніх баз даних). Розробники Subversion часто називають сховище «файловою системою», тому другий тип отримав назву FSFS, тобто (версіонована) файлова система (англ. File System) поверх (звичайної) файлової системи.

Обидва типи репозиторіїв забезпечують достатню надійність при правильній організації (Berkeley DB використовує блокування файлів, тому її не можна використовувати на деяких мережевих файлових системах, що не підтримують блокувань), кожна з них має свої переваги і недоліки. Вважається, що FSFS легше правильно налаштувати, вона вимагає меншої уваги від адміністратора. Крім того, до релізу 1.4 сховища, що використовують Berkeley DB могли за певних умов опинитися в так званому заклиненому (англ. wedged) стані; потрібно втручання адміністратора для відновлення його працездатності. Починаючи з релізу 1.2 для нових сховищ за замовчуванням використовується FSFS.

Доступ до сховища[ред. | ред. код]

Subversion надає такі способи доступу до сховища:

  • Прямий доступ до сховища на диску (на локальній або мережевий файловій системі)
  • Віддалений доступ по протоколу WebDAV/Delta-V поверх HTTP (або HTTPS) з використанням модуля mod_dav_svn для вебсервера Apache 2
  • Віддалений доступ з використанням власного протоколу SVN:
    • На виділеному мережевому з'єднанні (за замовчуванням на TCP-порту 3690)
    • Через стандартний ввід-вивід (у тому числі через засоби віддаленого інтерфейсу командного рядка, наприклад SSH)

Всі ці способи можуть бути використані для роботи з репозиторіями обох типів (FSFS і Berkeley DB). Для доступу до одного і того ж репозиторію можуть одночасно використовуватися різні способи.

Відмінності від CVS[ред. | ред. код]

  • Subversion відстежує версії не тільки файлів, але і каталогів.
  • Якщо зміни зроблені в декількох файлах і каталогах, вони публікуються як одна транзакція. Це означає, що або в сховищі потрапляють всі зміни, або стан сховища не змінюється.
  • При будь-яких оновленнях версій між клієнтом і сервером передаються тільки відмінності між файлами.
  • Subversion підтримує копіювання, переміщення і перейменування файлів із збереженням історії змін.
  • З кожним файлом і каталогом може бути зв'язаний довільний набір властивостей, що складаються з назви і значення. Властивості теж знаходяться під керуванням версіями.
  • Subversion однаково ефективно працює як з текстовими, так і з двійковими файлами.
  • Починаючи з версії 1.2, підтримується необов'язкове блокування файлів.
  • У Subversion немає міток (tag) і гілок (branch), як таких. Замість них використовується ієрархія каталогів — для кожної гілки або мітки створюється окремий каталог. Створення таких каталогів — швидка і дешева операція, тому що дані не дублюються, натомість публікується нова версія, що відрізняється від попередньої лише розташуванням файлів.

Використання[ред. | ред. код]

Subversion прийшов на зміну CVS і поступово ставав найпоширенішим продуктом контролю за версіями, витісняючи попередника. Багато співтовариств розробників відкритого програмного забезпечення перейшли на використання Subversion. У їх числі такі відомі проєкти, як Apache Software Foundation, KDE, GNOME, GCC, MediaWiki, Python, Samba, Mono і багато інших.

Відповідно до звіту Forrester Research за 2007, Subversion став одноосібним лідером в категорії Standalone Software Configuration Management (SCM) і має потужні позиції в категорії Software Configuration and Change Management (SCCM)[4].

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

Станом на 2013 рік з відкритих проєктів, що використовують Subversion, можна відзначити: проєкти Apache, FreeBSD, Free Pascal, GCC, LLVM, Mono, WordPress і Ruby. Проте спостерігається великий відтік проєктів на Git, зокрема з Subversion на Git за останній час перейшли проєкти Django, PHP, MediaWiki, Ruby on Rails, з Subversion на Mercurial перейшов проєкт nginx. Підтримка Subversion реалізована в таких хостингах відкритих проєктів, як Google Code, CodePlex і SourceForge.

Виноски[ред. | ред. код]

  1. Wright H. Subversion is now Apache Subversion — 2010.
  2. англ. Sub- (під-) + англ. version (версія). Водночас англ. subversion — скидання, усунення.
  3. Subversion becomes Apache Subversion. Apache Software Foundation. Архів оригіналу за 26 червня 2013. Процитовано 19 травня 2010.
  4. The Forrester Wave: Software Change and Configuration Management, Q2 2007. Forrester Research. Архів оригіналу за 25 серпня 2011. Процитовано 19 лютого 2008.

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

Документація[ред. | ред. код]

Клієнти і плагіни[ред. | ред. код]

Публічні сховища SVN[ред. | ред. код]