Очікує на перевірку

Subversion

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

Apache Software Foundation

спільнота та розробники зCollabNet,Elego, VisualSVN
Перший випуск20 жовтня 2000
Стабільний випуск1.9 (5 серпня2015;9 років тому(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

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