Subversion розроблено спеціально для заміниCVS, найпоширенішої відкритої системи керування версіями. Вона має всі основні функції CVS (хоча деякі з них виконує іншими способами) і вільна від ряду її недоліків. Subversion часто називають «svn», за назвою клієнтської програми, що входить в її дистрибутив.
Subversion — централізована система. Дані зберігаються в єдиному сховищі. При збереженні нових версій використовується дельта-компресія, тобто система знаходить відмінності нової версії від попередньої і записує тільки їх, уникаючи непотрібного дублювання даних. Сховище може розташовуватися на локальному диску або на мережевому сервері. До локального сховища клієнт Subversion звертається безпосередньо. Для доступу до віддаленого сервера може використовуватися власний мережевий протокол або стандартний протоколWebDAV, підтримуваний за допомогою спеціального модуля длявебсервераApache.
Клієнти копіюють файли з сховища, створюючи локальні робочі копії, потім модифікують їх і публікують зміни в сховищі. Декілька клієнтів можуть одночасно звертатися до сховища. При використанні доступу за допомогоюWebDAV також підтримується прозоре керування версіями — якщо будь-який клієнт WebDAV відкриває для запису і потім зберігає файл, що зберігається на мережевому ресурсі, то автоматично створюється нова версія.
Зберігання повноїісторії змін відслідковуваних об'єктів (файлів,каталогів, символьних лінків) в централізованомусховищі (репозиторії), в тому числі при зміні атрибутів (метаданих), переміщенні, перейменуванні та видаленні
Копіювання об'єктів із розгалуженням історії — при копіюванні в сховище з'являються два окремих об'єкта зі спільною історією
Підтримкаперенесення змін між копіями об'єктів, в тому числі повногозлиття копій (в робочій копії; без об'єднання історії)
Підтримкарозгалужень:
створення розгалужень (копіювання директорій) та роботи з ними
злиття розгалужень (перенесенням змін)
Підтримкаміток (копіюванням директорій)
Історія змін і копії об'єктів (в тому числі розгалуження і мітки) зберігаються у вигляді зв'язаних різницевих копій — «дешевих» (таких, що не вимагають великих часових та дискових ресурсів) при створенні і зберіганні
Підтримка конкурентної (в тому числі одночасної, із ізоляцією транзакцій) багатокористувацької роботи зі сховищем та, в більшості випадків, автоматичним злиттям змін різних розробників (в робочій копії)
Фіксації змін в сховищі (в тому числі багатооб'єктні) організуються у виглядіатомарних транзакцій
Мережевий обмін між сервером і клієнтом передбачає передачу лише відмінностей між робочою копією та сховищем
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.
Всі ці способи можуть бути використані для роботи з репозиторіями обох типів (FSFS і Berkeley DB). Для доступу до одного і того ж репозиторію можуть одночасно використовуватися різні способи.
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 користується великою популярністю в комерційних компаніях і проєктах, що використовують централізований підхід до керування версіями і конфігурацією програмних систем.
Роки, якщо є, показують дату першого стабільного релізу. Системи з іменами виділенимикурсивом більше не підтримуються, або заплановано завершення підтримки.