Subversion: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
imported>Ufim
 
imported>Alex NB OT
м проект Check Wikipedia: исправление ошибки 75
 
Строка 1: Строка 1:
= {{-en-}} =
{{много внутренних ссылок|дата=2023-04-15}}
{{Нет сносок |дата=2025-07-06}}
{{значения|Subversion (игра)}}
{{Карточка программы}}


=== Морфологические и синтаксические свойства ===
'''Subversion'''<ref>[[Английский язык|Английское]] слово {{lang-en2|subversion}} можно перевести двояко — как «свержение» (subversion) и как «подверсия» (sub-version)</ref> (также известная как «'''SVN'''»<ref>По названию [[клиент (информатика)|программы-клиента]] для [[Интерфейс командной строки|командной строки]], входящей в состав пакета</ref>) — [[свободное программное обеспечение|свободная]] централизованная [[система управления версиями]], официально выпущенная в [[2004 год]]у компанией {{iw|CollabNet}}. С 2010 года Subversion является одним из проектов [[Apache Software Foundation]] и официально называется '''Apache Subversion''' (зарегистрированный [[товарный знак]]<ref>{{Cite web |url=http://www.apache.org/foundation/marks/list/ |title=Apache Trademark Listing |access-date=2015-10-10 |archive-date=2015-10-07 |archive-url=https://web.archive.org/web/20151007234158/http://www.apache.org/foundation/marks/list/ |url-status=live }}</ref>).
{{сущ en |слоги={{по-слогам|subversion}}|основа=|основа1=}}


{{морфо|прист1=|корень1=|суфф1=|оконч=}}
Цель проекта в начале разработки — заменить<ref>[http://subversion.apache.org/features.html Subversion Features] {{Wayback|url=http://subversion.apache.org/features.html |date=20110408060621 }}{{ref|en}}</ref><ref>[http://blog.red-bean.com/sussman/?p=20 The Risks of Distributed Version Control] {{Wayback|url=http://blog.red-bean.com/sussman/?p=20 |date=20110715164713 }} Бен Коллинз-Сассман {{ref|en}}</ref> распространённую на тот момент систему [[CVS|Concurrent Versions System]] (CVS), которая на сегодняшний день считается морально устаревшей<ref>[http://www.redhat.com/magazine/010aug05/features/subversion/ CVS is out, Subversion is in] {{webarchive|url=https://web.archive.org/web/20100325231953/http://www.redhat.com/magazine/010aug05/features/subversion/ |date=2010-03-25 }}{{ref|en}} Red Hat magazine, август 2005 г.</ref><ref>[https://sourceforge.net/apps/trac/sourceforge/wiki/CVS CVS — sourceforge] {{webarchive|url=https://web.archive.org/web/20100610014449/http://sourceforge.net/apps/trac/sourceforge/wiki/CVS |date=2010-06-10 }}</ref><ref>{{Cite web |url=http://www.citforum.ru/programming/application/cvs/ |title=CVS — система управления версиями |access-date=2010-06-30 |archive-date=2010-07-08 |archive-url=https://web.archive.org/web/20100708062202/http://www.citforum.ru/programming/application/cvs/ |url-status=live }}</ref>. Subversion обладает всеми основными функциями CVS и избавлена от ряда недостатков последней.


=== Произношение ===
Subversion всё ещё используется некоторыми сообществами разработчиков [[открытое программное обеспечение|открытого программного обеспечения]] (в том числе сообществами, ранее использовавшими [[CVS]]), но почти все крупные проекты перешли на [[DVCS]]. В числе последних пользователей Subversion среди открытых проектов остаётся [[FreeBSD]], но и они анонсировали переход на [[Git]]<ref>{{cite web
{{transcriptions|||}}
|url          = https://lists.freebsd.org/pipermail/freebsd-current/2020-December/077858.html
|title        = HEADS UP: FreeBSD src repo transitioning to git this weekend
|lang        = en
|website      = lists.freebsd.org
|date        = 2020-12-17
|access-date  = 2020-12-22
|archive-date = 2020-12-18
|archive-url  = https://web.archive.org/web/20201218082534/https://lists.freebsd.org/pipermail/freebsd-current/2020-December/077858.html
|url-status    = live
}}</ref>. Довольно долго использовали Subversion такие известные проекты, как [[Apache HTTP Server|Apache]], [[GCC]],  [[FFmpeg]], [[LLVM]], [[Free Pascal]]. Subversion также используется в закрытых проектах и корпоративной сфере, но насколько широко — оценить непросто. [[Хостинг]] Subversion, в том числе для проектов с открытым кодом, также предоставляют популярные хостинг-проекты [[SourceForge.net]], [[Tigris.org]], [[Google Code]] и [[BountySource]].


=== Семантические свойства ===
В [[2007 год]]у аналитическая компания [[Forrester]], сравнивая преимущества и недостатки различных систем, оценила Subversion как ''«единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration and Change Management (SCCM)»''.<ref>{{cite web|url=http://www.collab.net/forrester_wave_report/index.html|title=The Forrester Wave: Software Change and Configuration Management, Q2 2007|publisher=[[Forrester Research]]|archive-url=https://www.webcitation.org/61CgLWnEn?url=http://www.collab.net/forrester_wave_report/index.html|archive-date=2011-08-25|url-status=dead}}</ref>
{{илл|lang=en|}}


==== Значение ====
По данным статистики использования пакетов [[Дистрибутив Linux|Linux-дистрибутивов]] [[Debian]]<ref>{{Cite web |url=http://qa.debian.org/popcon-graph.php?packages=bzr%2Cgit%2Cgit-core%2Cmercurial%2Csubversion%2C+cvs&show_vote=on&want_legend=on&from_date=2006-01-01&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1 |title=Popularity contest statistics for bzr, git, git-core, mercurial, subversion |access-date=2010-06-24 |archive-date=2014-04-06 |archive-url=https://web.archive.org/web/20140406204726/http://qa.debian.org/popcon-graph.php?packages=bzr%2Cgit%2Cgit-core%2Cmercurial%2Csubversion%2C+cvs&show_vote=on&want_legend=on&from_date=2006-01-01&to_date=&hlght_date=&date_fmt=%25Y-%25m&beenhere=1 |url-status=live }}</ref> и [[Ubuntu]]<ref>{{Cite web |url=http://popcon.ubuntu.com/by_inst |title=Архивированная копия |access-date=2010-06-24 |archive-date=2011-07-17 |archive-url=https://web.archive.org/web/20110717133419/http://popcon.ubuntu.com/by_inst |url-status=live }}</ref>, количество активных пользователей Subversion достигло максимума примерно в 2010 году, и начало снижаться с 2016 года. Тем не менее, количество проектов, использующих Subversion всё ещё больше, чем использующих [[CVS]], [[Mercurial]] и [[Bazaar]] (по состоянию на август [[2019 год]]а).
# {{помета.|en}} [[опрокидывание]], [[сбрасывание]], [[свержение]] {{пример||перевод=}}
# {{помета.|en}} [[низложение]], [[свержение]] {{пример||перевод=}}
# {{помета.|en}} подготовка свержения, антиправительственная деятельность {{пример||перевод=}}
#


==== Синонимы ====
В качестве официальной документации позиционируется<ref>см. http://subversion.apache.org/docs/ {{Wayback|url=http://subversion.apache.org/docs/ |date=20100617205614 }} {{ref|en}}</ref> книга издательства [[O’Reilly Media]], выложенная в свободный доступ<ref name="svn-book">{{cite web
#
| url = http://svnbook.red-bean.com/
#
| title = Version Control with Subversion
| lang = en
| author = Ben Collins-Sussman, Brian W. Fitzpatrick & C. Michael Pilato
| access-date = 2019-11-27
| archive-date = 2010-08-08
| archive-url = https://web.archive.org/web/20100808122436/http://svnbook.red-bean.com/
| url-status = live
}}</ref> и дописываемая авторами по мере выхода новых версий SVN. Там же публикуются её переводы на ряд языков, в том числе русский, но при том, что англоязычные версии книги сейчас описывают версии 1.8 и 1.7, на русском языке имеются лишь книги, описывающие версии до 1.4 включительно<ref name="svn-book-ru">{{cite web
| url = http://svnbook.red-bean.com/index.ru.html
| title = Управление версиями в Subversion
| author = Бен Коллинз-Сассман, Брайан У. Фитцпатрик, К. Майкл Пилато
| access-date = 2019-11-27
| archive-date = 2019-11-18
| archive-url = https://web.archive.org/web/20191118225142/http://svnbook.red-bean.com/index.ru.html
| url-status = live
}}</ref>.


==== Антонимы ====
== История ==
#  
Разработка Subversion была начата в [[2000 год]]у по инициативе и при финансовой поддержке CollabNet. Инициаторы проекта хотели создать [[Свободное программное обеспечение|свободную]] систему управления версиями, в основном похожую на CVS, но [[#Subversion и CVS|лишённую её ошибок и неудобств]]. В то время не существовало лучших программ этого класса со свободной лицензией, CVS была стандартом де-факто среди разработчиков свободного программного обеспечения. Выбрав её за основу, разработчики Subversion надеялись упростить разработку за счёт использования уже проверенных концепций и в то же время облегчить переход на новую систему многочисленным пользователям CVS.<ref>{{cite web
#
|url        = http://svnbook.red-bean.com/nightly/ru/svn.intro.whatis.html#svn.intro.history
|title      = История Subversion /Управление версиями в Subversion
|author      = Бен Коллинз-Сассман, Брайан У. Фицпатрик, К. Майкл Пилато
|lang        = ru
|date        = 2007
|access-date  = 2010-07-21
|description = Для Subversion 1.4
|archive-url  = https://www.webcitation.org/61CgMJhTd?url=http://svnbook.red-bean.com/nightly/ru/svn.intro.whatis.html#svn.intro.history
|archive-date = 2011-08-25
|url-status    = dead
}}</ref>


==== Гиперонимы ====
Основные события истории развития Subversion.
#
* [[31 августа]] [[2001 год]]а команда разработчиков перешла с CVS на Subversion для управления собственным исходным кодом: Subversion стала «самодостаточной».
#
* [[23 февраля]] [[2004 год]]а вышла версия 1.0.0<ref>[http://svn.apache.org/repos/asf/subversion/trunk/CHANGES Список изменений] {{Wayback|url=http://svn.apache.org/repos/asf/subversion/trunk/CHANGES |date=20100618133127 }}{{ref|en}}</ref>. К этому времени Subversion уже использовалась примерно на 1400 серверах с открытым доступом.<ref>[http://goliath.ecnext.com/coms2/gi_0199-140633/CollabNet-Primary-Sponsor-of-Subversion.html Goliath Business News] {{webarchive|url=https://web.archive.org/web/20081205103032/http://goliath.ecnext.com/coms2/gi_0199-140633/CollabNet-Primary-Sponsor-of-Subversion.html |date=2008-12-05 }}</ref>
* [[29 сентября]] [[2004 год]]а появился релиз 1.1.0. Среди основных нововведений — новый формат хранилища на основе обычных файлов (FSFS), в дополнение к существовавшему ранее (с использованием [[Berkeley DB]]).<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.1.html |title=Subversion 1.1 Release Notes |access-date=2010-06-18 |archive-date=2010-06-17 |archive-url=https://web.archive.org/web/20100617210217/http://subversion.apache.org/docs/release-notes/1.1.html |url-status=live }}</ref>
* [[21 мая]] [[2005 год]]а вышел релиз 1.2.0, в котором добавлена возможность блокировки файлов,<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.2.html |title=Subversion 1.2 Release Notes |access-date=2010-06-18 |archive-date=2010-06-17 |archive-url=https://web.archive.org/web/20100617210203/http://subversion.apache.org/docs/release-notes/1.2.html |url-status=live }}</ref> что позволило улучшить поддержку клиентов WebDAV/DeltaV, в том числе, реализовать автоматическое создание новых версий при редактировании файлов с помощью таких клиентов. Начиная с этого релиза Subversion по умолчанию использует FSFS для новых хранилищ.
* [[30 декабря]] [[2005 год]]а вышел релиз 1.3.0.<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.3.html |title=Subversion 1.3 Release Notes |access-date=2010-06-19 |archive-date=2010-06-17 |archive-url=https://web.archive.org/web/20100617205806/http://subversion.apache.org/docs/release-notes/1.3.html |url-status=live }}</ref> Основными изменениями являются возможность устанавливать права доступа к каталогам при использовании svnserve, дополнительные возможности команд, а также множество улучшений для разработчиков.
* [[10 сентября]] [[2006 год]]а вышел релиз 1.4.0.<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.4.html |title=Subversion 1.4 Release Notes |access-date=2010-06-18 |archive-date=2010-06-17 |archive-url=https://web.archive.org/web/20100617204755/http://subversion.apache.org/docs/release-notes/1.4.html |url-status=live }}</ref> Он поддерживает работу с BerkeleyDB 4.4 и может использовать её функции самовосстановления. Ранее при сбоях Subversion хранилище, использующее BerkeleyDB, могло остаться в «заклиненном» состоянии и требовалось вмешательство администратора для восстановления работы системы (при использовании FSFS этой проблемы нет).
* [[19 июня]] [[2008 год]]а вышел релиз 1.5.0<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.5.html |title=Subversion 1.5 Release Notes |access-date=2010-06-18 |archive-date=2016-07-02 |archive-url=https://web.archive.org/web/20160702063028/http://subversion.apache.org/docs/release-notes/1.5.html |url-status=live }}</ref>, в нём сделано множество улучшений, самым значительным из которых является базовая поддержка отслеживания слияний ({{lang-en|merge tracking}}). Эта возможность делает процесс слияния пакетов в Subversion более простым и надёжным.
* [[20 марта]] [[2009 год]]а вышел релиз 1.6.0.<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.6.html |title=Subversion 1.6 Release Notes |access-date=2010-06-18 |archive-date=2010-06-17 |archive-url=https://web.archive.org/web/20100617205835/http://subversion.apache.org/docs/release-notes/1.6.html |url-status=live }}</ref> Улучшения поддержки <code>svn:externals</code>, обнаружение «конфликтов деревьев» ({{lang-en|tree conflict}}), улучшение эффективности хранения данных в репозитории и другие внесённые изменения.
* В феврале [[2010 год]]а проект Subversion был официально переведён под управление [[Apache Software Foundation]] (ASF)<ref>[http://www.nixp.ru/news/Subversion-переведена-под-контроль-Apache-Software-Foundation.html Subversion переведена под контроль Apache Software Foundation] {{Wayback|url=http://www.nixp.ru/news/Subversion-%D0%BF%D0%B5%D1%80%D0%B5%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B0-%D0%BF%D0%BE%D0%B4-%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C-Apache-Software-Foundation.html |date=20100223055210 }}, nixp.ru</ref>. Президент Subversion Corporation и директор [[Открытое программное обеспечение|Open Source]] в WANdisco выступил с видеообращением, в котором с энтузиазмом пообещал всем, что переход Subversion к ASF будет лишь способствовать более активному развитию проекта.<ref>[http://subversion.wandisco.com/jomsocial/videos/12-Subversion+the+Move+to+the+Apache+Software+Foundation.html?userid=70 Subversion & the Move to the Apache Software Foundation]{{Недоступная ссылка|date=Май 2018 |bot=InternetArchiveBot }}, (видеообращение президента Subversion Corporation)</ref>
* [[11 октября]] [[2011 год]]а состоялся релиз 1.7<ref>{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.7.html |title=Apache Subversion 1.7 Release Notes |access-date=2011-10-12 |archive-date=2011-10-12 |archive-url=https://web.archive.org/web/20111012174327/http://subversion.apache.org/docs/release-notes/1.7.html |url-status=live }}</ref>. Основные улучшения: теперь только одна папка <code>.svn</code> в корне рабочей копии; ускорена работа по HTTP; добавлена утилита <code>svnrdump</code>; новая команда <code>svn patch</code>.
* 18 июня [[2013 год]]а вышел релиз 1.8.0.<ref name="release-notes-1_8">{{Cite web |url=http://subversion.apache.org/docs/release-notes/1.8.html |title=Subversion 1.8 Release Notes |access-date=2013-07-09 |archive-date=2013-07-10 |archive-url=https://web.archive.org/web/20130710203530/http://subversion.apache.org/docs/release-notes/1.8.html |url-status=live }}</ref> Apache Subversion 1.8 является расширением всех предыдущих выпусков Subversion.


==== Гипонимы ====
{| class="wikitable"
#
|-
#
! Версия
! Дата первоначального выпуска
! Последняя версия
! Дата последнего выпуска
! Статус
|-
| {{Версия|o|1.0}}
| 2004-02-23
| 1.0.9
| 2004-10-13
| Больше не поддерживается
|-
| {{Версия|o|1.1}}
| 2004-09-29<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.1.html |title=Subversion 1.1 Release Notes |access-date=2015-09-21}}</ref>
| 1.1.4
| 2005-04-01
| Больше не поддерживается
|-
| {{Версия|o|1.2}}
| 2005-05-21<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.2.html |title=Subversion 1.2 Release Notes |access-date=2015-09-21}}</ref>
| 1.2.3
| 2005-08-19
| Больше не поддерживается
|-
| {{Версия|o|1.3}}
| 2005-12-30<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.3.html |title=Subversion 1.3 Release Notes |access-date=2015-09-21}}</ref>
| 1.3.2
| 2006-05-23
| Больше не поддерживается
|-
| {{Версия|o|1.4}}
| 2006-09-10<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.4.html |title=Subversion 1.4 Release Notes |access-date=2015-09-21}}</ref>
| 1.4.6
| 2007-12-21
| Больше не поддерживается
|-
| {{Версия|o|1.5}}
| 2008-06-19<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.5.html |title=Subversion 1.5 Release Notes |access-date=2015-09-21}}</ref>
| 1.5.9
| 2010-12-06
| Больше не поддерживается
|-
| {{Версия|o|1.6}}
| 2009-03-20<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.6.html |title=Apache Subversion 1.6 Release Notes |access-date=2015-09-21}}</ref>
| 1.6.23
| 2013-05-30
| Больше не поддерживается
|-
| {{Версия|o|1.7}}
| 2011-10-11<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.7.html |title=Apache Subversion 1.7 Release Notes |access-date=2015-09-21}}</ref>
| 1.7.22
| 2015-08-12
| Больше не поддерживается
|-
| {{Версия|o|1.8}}
| 2013-06-18<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.8.html |title=Apache Subversion 1.8 Release Notes |access-date=2015-09-21}}</ref>
| 1.8.19
| 2017-08-10
| Больше не поддерживается
|-
| {{Версия|o|1.9}}
| 2015-08-05<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.9.html |title=Apache Subversion 1.9 Release Notes |access-date=2015-09-21}}</ref>
| 1.9.12
| 2019-07-24
| Больше не поддерживается
|-
| {{Версия|o|1.10}}
| 2018-04-13<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.10.html |title=Apache Subversion 1.10 Release Notes |access-date=2018-04-17}}</ref>
| 1.10.8
| 2022-04-12
| Больше не поддерживается
|-
| {{Версия|o|1.11}}
| 2018-10-30<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.11.html |title=Apache Subversion 1.11 Release Notes |access-date=2018-10-31}}</ref>
| 1.11.1
| 2019-01-11
| Больше не поддерживается
|-
| {{Версия|o|1.12}}
| 2019-04-24<ref>{{cite web |url=https://subversion.apache.org/docs/release-notes/1.12.html |title=Apache Subversion 1.12 Release Notes |access-date=2019-05-01}}</ref>
| 1.12.2
| 2019-07-24
| Больше не поддерживается
|-
| {{Версия|o|1.13}}
| 2019-10-30<ref>{{cite web|title=Apache Subversion 1.13 Release Notes|url=https://subversion.apache.org/docs/release-notes/1.13.html}}</ref>
| 1.13.0
| 2019-10-30
| Больше не поддерживается
|-
| {{Версия|c|1.14}}
|2020-05-27<ref>{{Cite web|title=Apache Subversion 1.14 LTS Release Notes|url=https://subversion.apache.org/docs/release-notes/1.14.html|access-date=2020-06-02|website=subversion.apache.org}}</ref>
|1.14.5<ref>{{Cite web |last=The Subversion Team |title=Apache Subversion News Archives |url=https://subversion.apache.org/news.html |access-date=2024-12-20 |website=subversion.apache.org |publisher=The Apache Software Foundation}}</ref><ref>{{Cite web |first=Daniel |last=Sahlberg |date=2024-12-08 |title=Release Announcement – [SECURITY][ANNOUNCE] Apache Subversion 1.14.5 released |series=User mailing list for Subversion |url=https://lists.apache.org/thread/jz1j48zrpryw8600n0x7kssvyq90y1fs |access-date=2024-12-08 |website=lists.apache.org |publisher=The Apache Software Foundation}}</ref><ref>{{Cite web |last=The Subversion Team |date=2024-10-08 |title=Changelog for Version 1.14.5 and earlier |url=https://svn.apache.org/repos/asf/subversion/tags/1.14.5/CHANGES |access-date=2024-12-20 |website=Apache Subversion |publisher=The Apache Software Foundation}}</ref>
|2024-12-08
|Полностью поддерживается, [[Долгосрочная поддержка программного обеспечения|LTS]]
|-
| {{Версия|p|1.15}}
|20XX
|1.15.0
|(Ещё не выпущено)
|В разработке
|-
| colspan="5" | <small>{{Версия |l |show=111111}}</small>
|}


=== Родственные слова ===
== Общие сведения ==
{{родств-блок
 
|умласк=
=== Возможности ===
|имена-собственные=
* Хранение полной ''истории изменений'' отслеживаемых объектов ([[файл]]ов, [[каталог (файловая система)|каталогов]], [[символьная ссылка|символьных ссылок]]<ref>работа с [[символьная ссылка|символьными ссылками]] поддерживается только в рабочих копиях под [[UNIX]]-системами</ref>) в централизованном ''хранилище'' (репозитории), в том числе при изменении атрибутов («[[метаданные|метаданных]]»), перемещении, переименовании и удалении
|существительные=
* ''Копирование'' объектов с разветвлением истории — при копировании в хранилище появляются два отдельных объекта с общей историей
|прилагательные=
* Поддержка ''переноса изменений'' между копиями объектов, в том числе полного ''слияния копий'' (в рабочей копии; без объединения истории)
|числительные=
* Эмуляция<ref name="no_internal_concept_of_a_branch">Ветви и метки в Subversion не являются независимым измерением хранилища. См. [http://svnbook.red-bean.com/en/1.7/svn.branchmerge.using.html#svn.branchmerge.using.concepts The Key Concepts Behind Branching] {{Wayback|url=http://svnbook.red-bean.com/en/1.7/svn.branchmerge.using.html#svn.branchmerge.using.concepts |date=20151005205129 }}</ref> ''[[Ветвь (управление версиями)|ветвления]]'':
|глаголы=
** создание ветвей с помощью копирования каталогов и последующая независимая работа с ними
|наречия=
** слияние ветвей с автоматическим определением и переносом изменений
}}
* Эмуляция<ref name="no_internal_concept_of_a_branch" /> ''меток'' (копированием каталогов)
* История изменений и копии объектов (в том числе ветви и метки) хранятся в виде связанных разностных копий — «дешёвых» (не требующих больших временны́х и дисковых ресурсов) при создании и хранении
* Поддержка конкурентной (в том числе одновременной, с изоляцией транзакций) многопользовательской работы с хранилищем и, в большинстве случаев, автоматическим слиянием изменений различных разработчиков (в рабочей копии)
* Фиксации изменений в хранилище (в том числе многообъектные) организуются в виде ''атомарных транзакций''
* Сетевой обмен между сервером и клиентом предусматривает передачу только различий между рабочей копией и хранилищем
* Обеспечивается одинаково эффективная работа как с [[текстовый файл|текстовыми]], так и с [[двоичный файл|двоичными файлами]]
* Различные варианты доступа к хранилищу, в том числе:
** непосредственный доступ на локальной файловой системе;
** по собственному сетевому протоколу;
** через [[веб-сервер]] по протоколу [[WebDAV]]/[[DeltaV]].
* Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами
* Возможность зеркалирования хранилища
* Два возможных внутренних формата хранилища ({{lang-en|repository}}): база данных или набор обычных файлов
* [[Интернационализация|Интернационализированные]] сообщения программы (используются настройки [[Локаль|локали]])
* Библиотеки для языков [[PHP]], [[Python]], [[Perl]], [[Java]] позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках
* Многоуровневая архитектура [[библиотека (программирование)|библиотек]], изначально рассчитанная на [[клиент-сервер]]ную модель
 
=== Модель работы ===
Subversion — централизованная система (в отличие от распределённых систем, таких как [[Git]] или [[Mercurial]]), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом [[сервер (аппаратное обеспечение)|сервере]].
 
Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют [[файл]]ы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель ''копирование — изменение — слияние''. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель ''блокирование — изменение — разблокирование''.
 
При сохранении новых версий используется [[Дельта-кодирование|дельта-компрессия]]: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.
 
При использовании доступа с помощью WebDAV также поддерживается прозрачное управление версиями — если любой клиент WebDAV открывает для записи и затем сохраняет файл, хранящийся на сетевом ресурсе, то автоматически создаётся новая версия.
 
=== Типы репозиториев ===
Subversion предлагает два варианта организации репозиториев<ref>Термины ''хранилище'' и ''репозиторий'' являются синонимами.</ref>. Репозитории первого типа используют для хранения [[база данных|базы данных]] на основе [[Berkeley DB]], репозитории второго типа — обычные [[файл]]ы специального [[формат файла|формата]] (доступ к данным организуется с помощью собственных библиотек, без использования сторонних баз данных). Разработчики Subversion часто называют хранилище «файловой системой», поэтому второй тип получил название FSFS, то есть (версионированная) [[файловая система]] ({{lang-en|File System}}) поверх (обычной) файловой системы.
 
Оба типа репозиториев обеспечивают достаточную надёжность при правильной организации<ref>[http://svnbook.red-bean.com/nightly/ru/svn.reposadmin.basics.html#svn.reposadmin.basics.backends Глава 5. Администрирование хранилища] {{Wayback|url=http://svnbook.red-bean.com/nightly/ru/svn.reposadmin.basics.html#svn.reposadmin.basics.backends |date=20171109221744 }} в книге «Управление версиями в Subversion»</ref> (Berkeley DB использует блокировки файлов, поэтому её нельзя использовать на некоторых сетевых файловых системах, не поддерживающих блокировок), каждая из них обладает своими преимуществами и недостатками. Считается, что FSFS легче правильно настроить, она требует меньшего внимания от администратора. Кроме того, до релиза 1.4 хранилища, использующие Berkeley DB, могли при определённых условиях оказаться в так называемом заклиненном ({{lang-en|wedged}}) состоянии; требовалось вмешательство администратора для восстановления его работоспособности.
 
Начиная с релиза 1.2 для новых хранилищ по умолчанию используется FSFS. При выпуске релиза 1.8 использование Berkeley DB было объявлено нерекомендованным<ref name="release-notes-1_8" />. Новые возможности, которые будут добавлены в следующих релизах, могут не работать на серверах, использующих Berkeley DB. В дальнейшем поддержка Berkeley DB может быть прекращена.
 
=== Доступ к репозиторию ===
Subversion предоставляет следующие способы доступа к репозиторию:
 
* прямой доступ к репозиторию на диске (на локальной или сетевой файловой системе);
* удалённый доступ по протоколу [[WebDAV]]/[[Delta-V|DeltaV]] поверх [[HTTP]] (или [[HTTPS]]) с использованием модуля <code>mod_dav_svn</code> для веб-сервера [[Apache HTTP Server|Apache 2]];
* удалённый доступ с использованием собственного протокола ''SVN'':
** на выделенном сетевом соединении (по умолчанию на TCP-порту 3690);
** через стандартный ввод-вывод (в том числе через средства удалённого [[Интерфейс командной строки|CLI]], например, [[SSH]]).
 
Все эти способы могут быть использованы для работы с репозиториями обоих типов (FSFS и Berkeley DB). Для доступа к одному и тому же репозиторию могут одновременно использоваться разные способы.
 
== Основные концепции ==
 
=== Файловая система ===
[[Файл:Subversion 2D filesystem RU.svg|509px|thumb|''Рис. 1''. Двумерное представление файловой системы в Subversion]]
 
С точки зрения пользователя хранилище Subversion представляет собой «двумерную» [[Файловая система|файловую систему]]. Объекты в хранилище ([[файл]]ы и [[каталог (файловая система)|каталоги]]) идентифицируются двумя «[[Система координат|координатами]]»: ''именем'' и ''номером ревизии''. Другими словами, хранилище представляет собой [[Индексный массив|массив]] мгновенных снимков (ревизий) дерева файлов и каталогов, индексируемый номером ревизии. Каждый такой снимок — обычная (одномерная) файловая система.
 
При необходимости указания на конкретную ревизию объекта используется запись вида: <code>имя@ревизия</code>, например, <code>/main.c@29</code> — файл /main.c в ревизии 29. Такое указание ревизии, используемое для уточнения имени, называется ''[[#Оперативная и стержневая ревизии|стержневая ревизия]]'' ({{lang-en|peg revision}}).
 
На рис. 1 показано графическое представление файловой системы: вертикальная ось соответствует множеству имён, горизонтальная — множеству ревизий.
 
==== Имена файлов ====
Имя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах: существует только один корневой каталог, элементы пути разделяются [[Косая черта|косой чертой]] («/»). Объектами файловой системы являются [[файл]]ы и [[каталог (файловая система)|каталоги]] (а также [[Символическая ссылка|символические ссылки]], которые эмулируются из обычных файлов путём установки атрибута <code>svn:special</code>).
 
==== Номера ревизий ====
Номер ревизии в Subversion — это [[натуральное число]] (или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть ''N''-я ревизия — это состояние хранилища после ''N''-й фиксации.
 
В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние четырёх файлов и двух каталогов, существовавших в хранилище на тот момент.
 
Номер ревизии является аналогом [[Время|времени]] в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а бо́льшие — поздним.
* Минимальный номер ревизии 0 (ноль) соответствует изначальному состоянию хранилища, когда ещё не было зафиксировано ни одной правки. В нулевой ревизии хранилище содержит только пустой корневой каталог.
* Максимальный номер ревизии соответствует самому последнему состоянию хранилища, то есть состоянию после фиксации последней правки. Вместо указания номера последней ревизии можно использовать ключевое слово <code>HEAD</code> (головная ревизия); это удобно, поскольку номер головной ревизии увеличивается при каждой фиксации изменений.
 
Номер ревизии можно рассматривать как некую временну́ю отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана ([[#Свойства (properties)|свойство]] <code>svn:date</code>). Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён.
 
===== Оперативная и стержневая ревизии =====
[[Файл:Subversion peg revision RU.svg|400px|thumb|''Рис. 2''. Указание стержневой ревизии]]
 
Номер ревизии используется в двух различных [[контекст]]ах:
* ''оперативной'' ревизии ({{lang-en|operative revision}});
* ''стержневой'' ревизии ({{lang-en|peg revision}}).
 
Ревизия называется ''оперативной'', если она указывает ревизию или диапазон ревизий, к которому должна быть применена ''операция'', например:
 
svn log -r 199:230 <nowiki>http://some.path</nowiki>
 
В данном примере выполняется команда <code>svn log</code> для диапазона ревизий <code>199:230</code>, который и является диапазоном ''оперативных'' ревизий.
 
Однако указание только имени файла и оперативной ревизии иногда может неоднозначно указывать на объекты хранилища. Например, в ситуации, показанной на рис. 2, возникает неоднозначность при выполнении следующей команды:
 
svn log -r 29:33 <nowiki>http://some.path/bar.txt</nowiki>
 
В команде указан диапазон оперативных ревизий (<code>29:33</code>), но области, выделенные на рисунке голубым и зелёным фоном, в равной степени можно считать историей файла <code>/bar.txt</code> в диапазоне ревизий <code>29:33</code>. В подобных случаях необходимо указывать ещё и ''стержневую'' ревизию для разрешения неоднозначности. Стержневая ревизия — это номер ревизии, указанный в дополнение к [[URL]] объекта файловой системы (используется запись вида «<code>URL@ревизия</code>»). Название происходит от английского слова {{lang-en2|peg}}, которое можно перевести как «стержень» или «колышек». Стержневая ревизия отмечает ту цепочку состояний, которой принадлежит указанная пара <code>URL@ревизия</code> и, таким образом, однозначно идентифицирует объект хранилища, к которому должна быть применена команда. В приведённом ниже примере первая команда выведет историю, выделенную на рисунке голубым фоном, а вторая — историю, выделенную зелёным фоном:
 
svn log -r 29:33 <nowiki>http://some.path/file.txt@32</nowiki>
svn log -r 29:33 <nowiki>http://some.path/bar.txt@34</nowiki>
 
В качестве стержневой ревизии следует указывать как можно более позднее состояние интересующего объекта. Причина этого в том, что цепочка состояний однозначно отслеживается «назад», но не «вперёд». Например, URL со стержневой ревизией <tt><nowiki>http://some.path/foo.txt@31</nowiki></tt> принадлежит двум цепочкам состояний (выделены соответственно зелёным и серым фоном). Из этих двух цепочек указанный URL адресует серую цепочку, то есть при движении «вперёд» от стержневой ревизии операции копирования игнорируются.
 
==== Операции над файловой системой ====
Над объектами файловой системы в хранилище Subversion могут быть произведены перечисленные ниже операции<ref>Здесь перечислены операции именно с точки зрения ''файловой системы хранилища''. В рабочей копии действия над объектами несколько иные. Однако изменения в рабочей копии, будучи зафиксированными, вызовут в хранилище описанные здесь действия. Например, команда <code>svn move</code> в рабочей копии произведёт операции <code>D</code>, <code>A+</code> в хранилище.</ref> (см. рис. 1). В скобках указано краткое именование операции в обозначениях команды <code>svn status</code>.
 
* ''Добавление'' (A). Добавление объекта в файловую систему. Добавленный объект не имеет истории ревизий. Пример на рисунке:
** файл <code>/main.c</code> был ''добавлен'' в ревизии 27.
* ''Модификация'' (M). Модификация объекта, например, изменение содержимого файла или изменение свойств файла или каталога. Пример на рисунке:
** файл <code>/main.c</code> был ''модифицирован'' в ревизии 28.
* ''Удаление'' (D). Удаление файла из головной и последующих ревизий. При этом файл остаётся в предыдущих ревизиях. Пример на рисунке:
** файл <code>/main.c</code> был ''удалён'' в ревизии 30.
* ''Добавление с историей'' (A+). Представляет собой копирование объекта внутри файловой системы хранилища, то есть объект <code>имя_источника@ревизия_источника</code> копируется в <code>имя_копии@HEAD</code>. Скопированный объект наследует от источника историю ревизий до момента копирования (наследование истории показано на рисунке пунктирными связями). Примеры на рисунке:
** в ревизии 29 каталог <code>/tags/R1</code> был скопирован с каталога <code>/trunk@27</code>;
** в ревизии 31 файл <code>/main.c</code> был скопирован с <code>/main.c@29</code>, то есть с более ранней ревизии самого себя, таким образом, произведено восстановление ранее удалённого (в ревизии 30) файла с сохранением истории ревизий.
* ''Замена'' (R+). Имеет место в случае, когда в одной ревизии произведено и удаление объекта (D), и добавление с историей (A+) объекта с тем же самым именем. Хотя имя при операции замены остаётся неизменным, Subversion рассматривает объект ''до'' и ''после'' замены как два различных объекта с различными историями ревизий (история старого заканчивается в точке замены, история нового наследуется от источника копирования и продолжается далее). Пример на рисунке:
** в ревизии 30 файл <code>/file.txt</code> был ''заменён'': старый файл <code>/file.txt</code> удалён, а новый файл с тем же именем скопирован с файла <code>/bar.txt@29</code>.
 
=== Фиксация изменений ===
 
==== Рабочая копия ====
Рабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию (скрытые каталоги с именем <code>.svn</code>). Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя. Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является каталог. Содержимое каталога можно извлечь не полностью: например, можно исключить отдельные файлы или подкаталоги. Однако извлечь из хранилища отдельный файл как рабочую копию невозможно.
 
Любой подкаталог рабочей копии Subversion 1.6 и более ранних версий также является полноценной рабочей копией, поскольку в каждом каталоге хранятся его служебные данные (каталоги <code>.svn</code>). Начиная с версии 1.7 в каждой рабочей копии присутствует только один каталог <code>.svn</code> в корне её каталога.
 
Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её. Поэтому, имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика.
 
В служебных каталогах рабочей копии, помимо прочего, хранится так называемая ''чистая копия'' ({{lang-en|pristine copy}}) — файлы рабочей копии в неизменённом виде, как они были извлечены из хранилища (для svn это ревизия с именем BASE). Наличие чистой копии позволяет быстро и без обращения к хранилищу выполнять операции просмотра и отката локальных изменений. Однако размер рабочей копии на диске примерно в два раза больше (данные + чистая копия данных), чем размер самих данных. Такой подход обусловлен тем, что дисковые ресурсы дешевле и доступнее, чем ресурсы [[Компьютерная сеть|сети передачи данных]].
 
Как правило, создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений, поскольку зафиксировать в хранилище можно только изменения, сделанные в рабочей копии. Исключением являются операции, которые могут быть выполнены прямо в хранилище без создания рабочей копии.
 
==== Транзакции ====
Работа с хранилищем в Subversion организована в форме [[Транзакция (информатика)|транзакций]] со свойствами ''атомарности'' и ''изоляции'' из набора свойств [[ACID]]. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.
 
* ''Атомарность'' фиксаций ({{lang-en|atomic commits}}) — изменения в нескольких файлах или каталогах фиксируются единой транзакцией, порождая при этом одну ревизию. В случае неудачной фиксации, при любом сбое или ошибке, система гарантирует, что хранилище не окажется в частично изменённом состоянии — в хранилище попадут либо все изменения, либо (при неудаче) — ни одного.
* ''Изоляция'' гарантирует, что промежуточные состояния хранилища внутри транзакции не видны другим транзакциям и пользователям. Например, если один пользователь фиксирует одной транзакцией изменения в нескольких файлах, то другие пользователи не могут увидеть такого состояния хранилища, в котором часть файлов уже изменена, а часть — не изменена.
 
Данные свойства не гарантируются для ''рабочей копии'' Subversion — она, в отличие от хранилища, при сбое или прерывании может оказаться в промежуточном или заблокированном состоянии (то есть перед продолжением работы её потребуется восстановить командой <code>svn cleanup</code> или пересоздать заново).
 
==== Локальные и удалённые формы команд ====
Все команды клиента Subversion можно разделить на следующие группы:
* модифицирующие рабочую копию;
* модифицирующие хранилище;
* модифицирующие и рабочую копию, и хранилище;
* не модифицирующие ничего.
 
=== Структура хранилища ===
 
==== Структура проекта в хранилище ====
Формально Subversion не накладывает каких-либо ограничений на файловую структуру проекта — она может быть какой угодно в рамках правил именования объектов файловой системы. Тем не менее, существуют рекомендации, призванные облегчить работу с ветвями и метками. В простейшем случае в корневом каталоге хранилища рекомендуется создать как минимум три подкаталога:
 
'''/.'''
  '''branches'''
  '''tags'''
  '''trunk'''
 
Вся файловая структура проекта (основной линии разработки) должна содержаться в подкаталоге <code>trunk</code>, подкаталог <code>branches</code> должен содержать ''[[Ветвь (управление версиями)|ветви]]'' проекта, а <code>tags</code> — ''[[#Метки|метки]]''. Например, следующая структура каталогов хранилища:
 
'''/.'''
  '''branches'''
    branch_1
  '''tags'''
    tag_1
    tag_2
  '''trunk'''
 
предполагает наличие у проекта (<code>trunk</code>) одной ветви «<code>branch_1</code>» и двух меток «<code>tag_1</code>» и «<code>tag_2</code>». Каждый из этих каталогов (<code>trunk</code>, <code>branch_1</code>, <code>tag_1</code> и <code>tag_2</code>) содержит копию соответствующей версии проекта.
 
Если (под)проектов в хранилище несколько, то такая структура подкаталогов создаётся для каждого (под)проекта:
'''/.'''
  '''project1'''
    branches
    tags
    trunk
  '''project2'''
    branches
    tags
    trunk
 
То есть в корневом каталоге находятся каталоги проектов, и в каждом из них есть свои <code>trunk</code>, <code>branches</code>, <code>tags</code>, относящиеся только к этому проекту. Описанные структуры каталогов хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае.<ref>[http://rsdn.ru/article/devtools/subversions.xml#EDC Структура проектов на C++ с использованием Subversion и Mxx_ru] {{Wayback|url=http://rsdn.ru/article/devtools/subversions.xml#EDC |date=20080219225117 }}.</ref><ref>[http://rsdn.ru/article/devtools/VrezkaSVN.xml Хранение сложных проектов в репозитории и установка tag’ов на несколько проектов сразу] {{Wayback|url=http://rsdn.ru/article/devtools/VrezkaSVN.xml |date=20080804100142 }}.</ref>
 
Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий (путём импорта командой <code>svnadmin load</code> с параметром <code>--parent-dir</code>).
 
==== Ветви ====
{{Основная статья|Ветвь (управление версиями)}}
Subversion использует «файловую» модель (такую же, как и в [[Perforce]]<ref>[http://www.perforce.com/perforce/branch.html Inter-File Branching in Perforce] {{webarchive|url=https://web.archive.org/web/20070714160428/http://www.perforce.com/perforce/branch.html |date=2007-07-14 }}</ref>) для реализации ветвей и меток, то есть ветвь является обычным каталогом (можно также сделать ветвь из одного файла, а не каталога). Новая ветвь создаётся командой <code>svn copy</code>. Ветвь может быть создана в любом каталоге хранилища, однако имеет смысл придерживаться описанных выше [[#Структура проекта в хранилище|соглашений]] о том, где создавать новые ветви. Более подробная информация о ветвях приведена в разделах [[#Ветвление|Ветвление]] и [[#Слияние|Слияние]].
 
==== Метки ====
Создание метки также производится командой <code>svn copy</code>, то есть технически не отличается от создания ветви. Отличие только в способе использования: предполагается, что никто не будет изменять данные в метке (фиксировать в неё изменения). Например, на рис. 1 метка создана в ревизии 29: каталог <code>/trunk</code> из ревизии 27 скопирован под именем <code>/tags/R1</code>. Теперь, если не изменять данные в каталоге <code>/tags/R1</code>, то он навсегда останется точной копией каталога <code>/trunk@27</code>, то есть будет ''меткой''.
 
Концепция меток, используемая в Subversion, отличается от концепции меток в других системах управления версиями. Обычно метка является символическим именем, которое ''адресует'' набор файлов и их состояние. В Subversion метка ''копирует'' набор файлов и их состояние. Метки-копии в Subversion имеют свои достоинства и недостатки.
 
Достоинства:
* метка видна в структуре каталогов, можно сделать удобную древовидную организацию меток.
 
Недостатки:
* трудно узнать, в какие метки вошёл файл (то же для каталога);
* если права доступа установлены индивидуально<ref>{{Cite web |url=http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html |title=Path-Based Authorization |access-date=2008-05-27 |archive-date=2008-10-07 |archive-url=https://web.archive.org/web/20081007014902/http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html |url-status=live }}</ref> для каталогов, то метка эти права не наследует;
* содержимое метки может быть изменено;
* если из метки создать рабочую копию и зафиксировать из этой рабочей копии какие-либо изменения, то это изменит саму метку, а не те данные, которые были помечены. Правильным способом работы «от метки» является создание рабочей копии не из метки, а ''из того, что является источником'' этой метки.
 
=== Свойства (properties) ===
Одной из важных возможностей Subversion является поддержка свойств, то есть текстовых пар ''имя'' = ''значение'', которые могут быть установлены для объектов в хранилище. Свойства используются в двух различных контекстах: для объектов файловой системы и для ревизий.
 
==== Свойства объектов файловой системы ====
Каждому файлу или каталогу в хранилище может быть присвоен набор свойств. Изменения свойств сохраняются в истории так же, как и изменения в файловой системе. Пользователи могут устанавливать свойства с любыми именами; существует также предопределённый набор служебных свойств, которые используются клиентской программой Subversion (имена служебных свойств имеют префикс "svn: ").
 
===== Свойства файлов =====
; <code>svn:executable</code> : Делает файл исполняемым (для рабочих копий под операционными системами семейства [[UNIX]]).
; <code>svn:mime-type</code> : Хранит [[MIME]]-тип файла. Влияет на способ работы команд, показывающих разницу файлов, а также объединяющих изменения (merging).
; <code>svn:keywords</code> : Список ''ключевых слов'' ({{lang-en|keywords}}), которые будут заменены в файле соответствующими значениями. Чтобы замена произошла, ключевое слово должно присутствовать в файле в виде <code>$keyword$</code>. Используется для того, чтобы автоматически обновлять в файле значения, меняющиеся от версии к версии (например, номер ревизии).
; <code>svn:eol-style</code> : Определяет правило преобразования [[символ конца строки|символов конца строки]] ({{lang-en|end-of-line, EOL}}) в текстовом файле. Используется в случаях, когда файл должен иметь конкретный тип символов EOL. Обычно используется «native» — при этом тип символов конца строки соответствует принятому в той операционной системе, в которой происходит создание рабочей копии.
; <code>svn:needs-lock</code> : Означает, что при извлечении из хранилища файл будет доступен только для чтения. Это свойство предназначено для использования совместно с механизмом ''блокировки''. Запрет записи в файл является напоминанием того, что надо получить блокировку на этот файл, прежде чем его редактировать: при получении блокировки клиентская программа Subversion автоматически делает файл доступным для записи (снятие блокировки снова делает файл защищённым от модификаций). Блокировки могут быть использованы и без установки этого свойства. Однако делать это не рекомендуется, так как существует риск того, что другой пользователь может начать редактировать заблокированный файл, и это обнаружится только при фиксации изменений.
; <code>svn:special</code> : Свойство не предназначено для установки или модификации пользователями. В настоящее время используется для хранения [[Символьная ссылка|символьных ссылок]] в репозитории. Когда символьная ссылка добавляется в репозиторий, в репозитории создаётся файл с установленным свойством <code>svn:special</code>. Когда этот файл извлекается в [[UNIX]]-подобной системе, клиентская программа Subversion преобразует его обратно в ссылку.
; <code>svn:mergeinfo</code> : Хранит информацию о том, из каких путей было произведено [[#Слияние|слияние]] в этот файл. Свойство введено в версии 1.5, оно используется для ''отслеживания слияний'' ({{lang-en|merge tracking}}). Представляет собой набор строк вида ''имя_файла: диапазон_ревизий''. Здесь ''имя_файла'' — полное (с путём от корня файловой системы репозитория) имя файла или каталога, откуда было произведено слияние указанного диапазона ревизий. Строки модифицируются автоматически при операциях слияния; при последующих слияниях Subversion учитывает ранее вписанные строки, избегая тем самым повторных слияний одних и тех же изменений. Не рекомендуется изменять свойство <code>svn:mergeinfo</code> вручную — это может нарушить механизм отслеживания слияний.
 
===== Свойства каталогов =====
; <code>svn:ignore</code> : Список шаблонов имён файлов и каталогов, которые клиентская программа Subversion будет игнорировать в данном каталоге. Это свойство аналогично файлу <code>.cvsignore</code> в [[CVS]]. Как правило, свойство настраивается таким образом, чтобы клиентская программа «не видела» файлы и каталоги, которые автоматически создаются различными программами и не должны быть версионированы (например, [[Объектный файл|объектные файлы]], [[Временный файл|временные файлы]] и т. п.). Действие этого свойства не распространяется на подкаталоги.
; <code>svn:externals</code> : Позволяет автоматически извлечь в рабочую копию набор каталогов, указав их [[URL]] (можно даже из другого хранилища).
; <code>svn:mergeinfo</code> : То же, что и [[#Свойства файлов|для файлов]].
 
==== Свойства ревизий ====
Второй тип объектов, для которых существуют свойства, — это сами ревизии. В этом случае имена свойств также могут быть любыми; некоторые свойства с префиксом "svn: " имеют специальное значение. Отличие свойств ревизий от свойств объектов файловой системы в том, что для первых понятие истории версий не применимо (поскольку конкретное значение свойства приписано одной ревизии). Другими словами, свойства ревизий можно изменить, но старое значение при этом теряется. По умолчанию изменение свойств ревизий запрещено; для разрешения администратор должен создать скрипт ({{lang-en|hook}}) обработки события <code>pre-revprop-change</code>.
 
; <code>svn:date</code> : Дата и время создания ревизии.
; <code>svn:author</code> : Имя пользователя, который зафиксировал изменения, вошедшие в эту ревизию.
; <code>svn:log</code> : Описание изменений, зафиксированных в этой ревизии (текст, введённый пользователем при фиксации изменений).
 
Как правило, свойства ревизий изменяются только администратором хранилища в целях исправления некорректных данных. Например, если пользователь забыл указать текстовое описание при фиксации своих изменений, то администратор может создать это описание путём редактирования свойства <code>svn:log</code>.
 
== Использование Subversion ==
 
=== Рабочий цикл ===
Типичная итерация рабочего цикла с Subversion включает следующие этапы.
* Обновление [[#Рабочая копия|рабочей копии]] из хранилища (<code>svn update</code>) или её создание (<code>svn checkout</code>).
* Изменение рабочей копии. Изменения каталогов и информации о файлах производится средствами Subversion, в ''изменении'' же (содержимого) файлов Subversion никак не задействован — изменения производятся программами, предназначенными для этого ([[Текстовый редактор|текстовые редакторы]], [[интегрированная среда разработки|средства разработки]] и т. п.):
** новые (ещё не зафиксированные в хранилище) файлы и каталоги нужно ''добавить'' (команда <code>svn add</code>), то есть передать под управление версиями;
** если файл или каталог в рабочей копии нужно ''удалить'', ''переименовать'', ''переместить'' или ''скопировать'', необходимо использовать средства Subversion (<code>svn mkdir</code>, <code>svn delete</code>, <code>svn move</code>, <code>svn copy</code>);
** просмотр состояния рабочей копии и локальных (ещё не зафиксированных) изменений (<code>svn info</code>, <code>svn status</code>, <code>svn diff</code>);
** любые локальные изменения, если они признаны неудачными, можно ''откатить'' (<code>svn revert</code>).
* При необходимости — дополнительное обновление, для получения изменений, зафиксированных в хранилище другими пользователями и слияния этих изменений со своими (<code>svn update</code>).
* Фиксация своих изменений (и/или результатов слияния) в хранилище (<code>svn commit</code>).
 
=== Ветвление ===
[[Ветвь (управление версиями)|Ветвление]] является важным аспектом работы систем управления версиями, поскольку типичные приёмы<ref>[http://svnbook.red-bean.com/nightly/ru/svn.branchmerge.commonuses.html Типовые примеры] {{Wayback|url=http://svnbook.red-bean.com/nightly/ru/svn.branchmerge.commonuses.html |date=20081203170719 }}, раздел в книге «Управление версиями в Subversion, версия 1.4»</ref> управления версиями (по крайней мере, при разработке [[Программное обеспечение|программного обеспечения]]) включают в себя использование ветвей. Subversion обладает достаточно развитыми возможностями для ветвления и слияния (однако [[#Слабая поддержка слияния ветвей|не поддерживает слияние]] переименованных файлов и каталогов).
 
[[Файл:Subversion project visualization ru.svg|650px|thumb|center|''Рис. 3''. Пример эволюции ветвей в Subversion]]
 
На рис. 3 условно показан пример эволюции ветвей в хранилище. Зелёным цветом показана основная линия разработки проекта ({{lang-en|mainline, trunk}}), жёлтым — ветви, синим — метки, пурпурным — ветвь, разработка которой прекращена. Красными стрелками показаны слияния изменений.
 
==== Создание ветвей ====
Новая [[#Ветви|ветвь]] (а также [[#Метки|метка]]) создаётся командой <code>svn copy</code>, которая создаёт в хранилище копию с наследованием истории ревизий источника (операция [[#Операции над файловой системой|A+]]). Для создания ветвей всегда следует использовать «удалённую» форму команды <code>svn copy</code>, например:
 
<nowiki>svn copy http://.../trunk/dir http://.../branches/branch_name -m "Creating a branch of dir"</nowiki>
 
Полученная копия будет ветвью (или меткой, в зависимости от способа работы с ней). В дальнейшем изменения, сделанные на ветви, могут быть внесены в источник, из которого была создана эта ветвь, такое распространение изменений называется ''[[#Слияние|слияние]]'' ({{lang-en|merge}}).
 
Операции копирования в Subversion ''дешёвые'' ({{lang-en|cheap copy}}), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом<ref>[http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-up Bubble-Up Method] {{Wayback|url=http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct.bubble-up |date=20100617101715 }}{{ref|en}}</ref>, что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогично [[Жёсткая ссылка|жёсткой ссылке]]), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однако ''слияние'' — необходимое дополнение к ветвлению — выполняется в Subversion медленнее, чем в других современных системах управления версиями).
 
==== Работа с ветвями ====
В целом работа на ветви не отличается от работы на основной линии разработки (''trunk''). Специфичные команды требуются только для действий, в которых задействовано более одной ветви. К таким командам относятся (помимо команды создания ветви <code>svn copy</code>):
* <code>svn switch</code> — переключение имеющейся рабочей копии на другую ветвь. В результате переключения служебные данные рабочей копии изменяются так, как будто эта рабочая копия получена операцией <code>svn checkout</code> из той ветви, на которую она переключена. При этом объём сетевого трафика меньше, чем при <code>svn checkout</code>, так как передаётся только разница между данными в рабочей копии и целевой ветвью;
* <code>svn merge</code> — копирование набора изменений между ветвями — используется для слияния.
 
Как правило, полный цикл работы с ветвями включает следующие этапы:
* создание ветви (<code>svn copy</code>);
* переключение имеющейся рабочей копии на ветвь (<code>svn switch</code>) или создание новой рабочей копии путём закачки (<code>svn checkout</code>);
* изменение файлов и каталогов в рабочей копии, фиксация этих изменений (<code>svn commit</code>);
* копирование в ветвь свежих изменений из родительской ветви, сделанных после ветвления (<code>svn merge</code>, <code>svn commit</code>);
* копирование изменений из ветви в родительскую ветвь (<code>svn merge</code>, <code>svn commit</code>);
* удаление ветви (<code>svn delete</code>), если её жизненный цикл закончен.
 
=== Слияние ===
 
==== Копирование изменений между ветвями ====
Слияние в Subversion — это применение к ветви набора изменений, сделанных на другой (или той же самой) ветви. Для осуществления слияния необходимо использовать команду <code>svn merge</code> — она применяет набор изменений к рабочей копии; затем нужно зафиксировать внесённые изменения (<code>svn commit</code>).
 
Терминология, связанная со слиянием, несколько запутана. Термин ''слияние'' ({{lang-en|merge}}) является не совсем точным, поскольку как такового объединения ветвей не происходит. Кроме того, не следует отождествлять ''слияние'' и команду <code>svn merge</code>: во-первых, для слияния нужно выполнить (помимо <code>svn merge</code>) разрешение конфликтов и фиксацию, во-вторых, применение <code>svn merge</code> не ограничивается слиянием.
 
==== Другие применения команды svn merge ====
Команду <code>svn merge</code> можно использовать не только для слияния. Фактически команда производит ''внесение в рабочую копию изменений, равных разнице между двумя каталогами или файлами в хранилище'', поэтому <code>svn merge</code> является универсальным средством для переноса изменений. Можно привести такие примеры использования команды <code>svn merge</code>:
* откат уже зафиксированных изменений, в том числе целого диапазона ревизий;
* удобный просмотр (в виде изменений в рабочей копии) разницы между двумя состояниями репозитория.


=== Этимология ===
=== Создание хранилища ===
От {{этимология:|en}}
Для создания хранилища используется команда <code>svnadmin create</code>. Эта операция создаст пустое хранилище в указанном каталоге.


=== Фразеологизмы и устойчивые сочетания ===
== Subversion и CVS ==
*


=== Библиография ===
=== Сравнение ===
*
Ниже приведено сравнение параметров систем Subversion и CVS, так как Subversion позиционируется именно как улучшение CVS. Приведено сравнение только по тем параметрам, по которым эти системы различаются. В целом Subversion превосходит CVS по всем параметрам, кроме поддержки меток в общепринятом смысле (то есть меток, ''адресующих'' объекты файловой системы).


<!-- Служебное: -->
{| class="standard"
{{improve|en|морфо|транскрипция/мн|пример|синонимы|гиперонимы|этимология}}
!Параметр
{{Категория|язык=en|||}}
!Subversion
{{длина слова|10|en}}
!CVS
|-
!colspan="3"|Возможности
|-
!Каталоги
|Отслеживает версии не только файлов, но и каталогов.
|Версии каталогов не отслеживаются, то есть структура каталогов одна и та же (та, которая существует в хранилище на данный момент) для всех ревизий и всех веток. Если изменить структуру каталогов, то при извлечении старых состояний получаем правильные (старые) ревизии файлов, но в неправильной (существующей на момент извлечения) структуре каталогов.
|-
!Транзакции
|Атомарность многофайловых фиксаций.
|Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной.
|-
!Наборы изменений
|Наборы изменений ({{lang-en|changeset}}) поддерживаются.
|Наборы изменений не поддерживаются.
|-
!Модификации имён файлов
|Поддерживает копирование, перемещение и переименование файлов и каталогов без потери истории изменений.
|При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри каталога при модификации его имени<ref>В CVS каталог можно переместить прямо в хранилище средствами [[Файловая система|файловой системы]], при этом файлы в нём не потеряют историю. Однако эта модификация подействует на все ревизии и ветви файлов в этого каталога (поскольку в CVS каталоги вообще не имеют версионной информации).</ref>.
|-
!Свойства (properties)
|С каждым файлом и каталогом может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями.
|Свойства не поддерживаются.
|-
!Блокировки
|Поддерживается необязательная блокировка файлов (начиная с версии 1.2).
|Блокировки не поддерживаются, но есть похожий механизм, называемый ''слежение''.
|-
!Ветви
|Ветви (''branch'', см. [[Система управления версиями#Словарь|словарь]]) реализованы в пространстве путей. Это значит, что для создания ветви производится копирование каталога (копия и будет ветвью). Создание таких копий — быстрая и не ресурсоёмкая операция, потому что данные [[#Создание ветвей|не дублируются]], вместо этого фиксируется новая версия, отличающаяся от предыдущей лишь расположением файлов.
|Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: ''путём'' в файловой системе, ''ревизией'' (или другим способом указания ревизии, например, временем), ''именем ветви''.
|-
!Метки
|Нет меток (''tag'', см. [[Система управления версиями#Словарь|словарь]]) как таковых. Вместо них используется иерархия каталогов — для метки создаётся отдельный каталог (как и для ветви). Метка — это ветвь, в которой по договорённости больше не делают изменений. Метка является ''копией'' помеченного состояния файлов и каталогов.
|Метки поддерживаются. Метка ''адресует'' помеченное состояние файлов.
|-
!colspan="3"|Эффективность
|-
!Клиент-серверный обмен
|При любых обновлениях версий между клиентом и сервером передаются только различия между файлами, что может существенно уменьшить сетевой трафик.
|С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью.
|-
!Двоичные файлы
|Одинаково эффективно работает как с [[Текстовый файл|текстовыми]], так и с [[Двоичный файл|двоичными файлами]].
|Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью.
|-
!Создание ветвей и меток
|Требуется небольшое фиксированное количество времени и дискового пространства.
|Затраты времени велики (зависят от количества задействованных файлов). Имена ветвей и меток хранятся избыточно (во всех задействованных файлах).
|-
!Накладные расходы в рабочей копии
|В служебных каталогах рабочей копии хранится чистая копия. Поэтому операции просмотра и отката локальных изменений выполняются быстро (без обращения к хранилищу), однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных.
|Чистая копия не хранится, размер рабочей копии примерно равен размеру данных. Вследствие этого операции просмотра и отката локальных изменений требуют доступа к хранилищу и выполняются медленно.
|-
!Расход [[оперативная память|памяти]] на сервере
|Меньше<ref>{{Cite web |url=http://subversion.apache.org/faq.html#server-requirements |title=Subversion FAQ |access-date=2010-04-14 |archive-date=2010-04-15 |archive-url=https://web.archive.org/web/20100415220838/http://subversion.apache.org/faq.html#server-requirements |url-status=live }}</ref>.
|Больше.
|}


= {{-fr-}} =
== Внутренняя структура ==


=== Морфологические и синтаксические свойства ===
=== Уровни ===
{{сущ fr f|слоги={{по-слогам|subversion}}|основа=|основа1=}}
Subversion спроектирован как набор библиотек, разделённых на несколько уровней. Каждый из них выполняет конкретную задачу и позволяет разработчикам создавать свои собственные инструменты, в зависимости от сложности и задачи.


{{морфо|прист1=|корень1=|суфф1=|оконч=}}
; Fs : Самый низкий уровень; реализует версионированную файловую систему, которая и хранит данные.
; Repos : Уровень хранилища, реализованного на файловой системе. На этом уровне реализовано множество вспомогательных функций, а также поддерживается запуск обработчиков ({{lang-en|hooks}}), то есть скриптов, которые запускаются при наступлении некоторого события. Вместе уровни Fs и Repos составляют ''интерфейс файловой системы''.
; mod_dav_svn : Обеспечивает [[WebDAV]]/[[Delta-V]]-доступ через Apache 2.
; Ra : Реализует доступ к хранилищу (и локальный, и удалённый). Начиная с этого уровня на хранилище можно ссылаться по URL, то есть
;* <code>file:///path/</code> для локального доступа,
;* <tt><nowiki>http://host/path/</nowiki></tt> или <tt><nowiki>https://host/path/</nowiki></tt> для доступа через WebDAV, или
;* <tt><nowiki>svn://host/path/</nowiki></tt> или <code>svn+ssh://host/path/</code> для доступа через протокол SVN.
; Client, Wc : Самый высокий уровень. Абстрагирует доступ к хранилищу и обеспечивает выполнение типичных задач клиента, таких как аутентификация пользователя или сравнение версий. Client использует библиотеку Wc для управления локальной рабочей копией.


=== Произношение ===
=== Конфигурация клиента ===
{{transcriptions|||}}
Стандартная клиентская утилита Subversion — SVN, конфигурируется переменными окружения и [[INI-файл]]ами, создаваемыми в домашнем каталоге пользователя в подкаталоге <code>.subversion</code> (расположение конфигурации в Windows-системах, в файлах или реестре, зависит от системных настроек). В конфигурации SVN также кеширует SSL-сертификаты, логины, пароли и т. п. (если это не запрещено в конфигурации) для доступа к серверам Subversion.


=== Семантические свойства ===
Содержимое каталога <code>.subversion</code>:
{{илл|lang=fr|}}
* файл <code>servers</code> — содержит информацию о способах сетевого подключения к удалённому репозиторию;
* файл <code>config</code> — содержит прочую конфигурационную информацию<ref>{{cite web|url=http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts|title=Runtime Configuration Area. Customizing Your Subversion Experience|access-date=2010-09-16|archive-url=https://www.webcitation.org/61CgMlCTi?url=http://svnbook.red-bean.com/en/1.5/svn.advanced.confarea.html#svn.advanced.confarea.opts|archive-date=2011-08-25|url-status=dead}}</ref>
* каталог <code>auth</code> — содержит [[кеш]] серверов, сертификатов, логинов и паролей
* файл <code>README.txt</code> — документация по конфигурированию SVN


==== Значение ====
== Недостатки ==
# {{помета.|fr}} [[опрокидывание]], [[сбрасывание]], [[свержение]]; [[ниспровержение]], [[разрушение]], подрывная деятельность {{пример||перевод=}}
#


==== Синонимы ====
=== Проблемы при переименовании файлов ===
#
Subversion не всегда может правильно обработать операции переименования файлов, если одновременно с переименованием изменяется и содержимое файла. Проблемы могут также возникнуть, если файл, переименованный в локальной копии, кто-то другой изменил в хранилище. Часть этих проблем исправлена в версии 1.5, однако это решение пока не полное.<ref>{{Cite web |url=http://subversion.tigris.org/svn_1.5_releasenotes.html#copy-move-improvements |title=Copy/move-related improvements in Subversion 1.5 |access-date=2008-06-24 |archive-date=2008-06-24 |archive-url=https://web.archive.org/web/20080624093048/http://subversion.tigris.org/svn_1.5_releasenotes.html#copy-move-improvements |url-status=live }}</ref>
#  


==== Антонимы ====
=== Слабая поддержка слияния ветвей ===
#
Также слабым местом Subversion считают операции слияния веток. До версии 1.5 все такие операции пользователям приходилось отслеживать вручную, с помощью подробных записей в журнале изменений. Начиная с версии 1.5 появилась базовая поддержка автоматического отслеживания слияний, которую разработчики планируют улучшить в последующих релизах<ref>{{Cite web |url=http://subversion.tigris.org/svn_1.5_releasenotes.html#merge-tracking |title=Merge tracking (foundational) |access-date=2008-06-24 |archive-date=2008-06-24 |archive-url=https://web.archive.org/web/20080624093048/http://subversion.tigris.org/svn_1.5_releasenotes.html#merge-tracking |url-status=live }}</ref>. В настоящее время Subversion достаточно хорошо поддерживает типовые сценарии слияния; в более сложных случаях возможны проблемы. Рекомендуется<ref>[http://blogs.open.collab.net/svn/2008/07/subversion-merg.html Subversion merge reintegrate] {{Wayback|url=http://blogs.open.collab.net/svn/2008/07/subversion-merg.html |date=20090831043324 }}{{ref|en}}</ref> организовать рабочий процесс так, чтобы избежать проблемных сценариев. Слияние переименованных файлов и каталогов не поддерживается.
#  


==== Гиперонимы ====
=== Невозможность удаления данных из хранилища ===
#
Информация, однажды помещённая в хранилище Subversion, остаётся там навсегда: файл можно удалить в текущей ревизии, но всегда есть возможность получить из хранилища одну из предыдущих ревизий, в которых файл существовал. Хотя сохранность прошлых ревизий и является, собственно, целью использования систем управления версиями, иногда бывает необходимо полностью удалить из хранилища информацию, попавшую туда по ошибке. В Subversion не предусмотрено для этого никакого штатного способа<ref>{{Cite web |url=http://subversion.tigris.org/issues/show_bug.cgi?id=516 |title=svn obliterate |access-date=2008-07-21 |archive-date=2002-11-22 |archive-url=https://web.archive.org/web/20021122131000/http://subversion.tigris.org/issues/show_bug.cgi?id=516 |url-status=live }}</ref>; единственная возможность заключается в создании дампа хранилища, его обработке штатной утилитой svndumpfilter и последующем восстановлении хранилища из дампа. Существуют также сторонние программы для автоматизации этого процесса, но, в любом случае, для выполнения этой операции требуется временное прекращение доступа к хранилищу и вмешательство администратора с привилегиями, достаточно высокими для того, чтобы полностью стереть старое хранилище и заменить его новым.
#


==== Гипонимы ====
== Дополнительное программное обеспечение ==
#
* [[Клиент (информатика)|Клиенты]]:
#
** [[RapidSVN]] — кросс-платформенный клиент Subversion на [[C++]];
** [[SmartSVN]] — кросс-платформенный клиент Subversion на [[Java]];
** [[TortoiseSVN]] — клиент Subversion, реализованный как расширение для [[Проводник Windows|проводника Windows]];
** [[RabbitVCS]] — клиент Subversion, реализованный как расширение для [[файловый менеджер|файлового менеджера]] в Linux (ранее назывался NautilusSVN);
** [[KDESvn]] - графический клиент Subversion в составе набора приложений KDE Software Compilation;
** [[VisualSVN]] — расширение для [[Visual Studio|Microsoft Visual Studio]].
* [[Плагин]]ы:
** [[AnkhSVN]] — плагин для [[Microsoft Visual Studio]],
** [[VisualSVN]] — плагин для [[Microsoft Visual Studio]],
** [[PushOK SVN SCC proxy]] — плагин для [[Microsoft SCC]],
** [[Subclipse]] — плагин для [[Eclipse (среда разработки)|Eclipse]],
** [[Subversive]] — плагин для [[Eclipse (среда разработки)|Eclipse]],
** [[MagnetSVN]] — плагин для Microsoft Office.
* [[Веб-интерфейс]]ы:
** [[Trac]] — инструмент, основанный на технологии Wiki,
** [[Redmine]] — дополнительно отслеживает ошибки,
** [[USVN]] — утилита для создания и управления доступом к репозиториям, специализирована под SVN,
** [[ViewVC]],
** [[WebSVN]],
** [[SVNManager]] — PHP-утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами),
** [[Submin]] — утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории,
** [[cSvn]] — кросс-платформенный клиент Subversion на [[C]].
* Сравнительная таблица: веб-интерфейсы:


=== Родственные слова ===
{| border="1" class="wikitable sortable"
{{родств-блок
| width="139" valign="bottom" |
|умласк=
'''Наименование'''
|имена-собственные=
| width="264" valign="bottom" |
|существительные=
'''Описание'''
|прилагательные=
| width="61" valign="bottom" |
|числительные=
'''Язык'''
|глаголы=
| width="129" valign="bottom" |
|наречия=
'''БД'''
}}
| width="158" valign="bottom" |
'''Лицензия'''
| width="220" valign="bottom" |
'''Сайт'''
| width="89" valign="bottom" |
'''Обновление'''
| width="68" valign="bottom" |
'''Версия'''
|-
| width="139" valign="bottom" |
[[Trac]]
| width="264" valign="bottom" |
инструмент, основанный на технологии Wiki
| width="61" valign="bottom" |
Python
| width="129" valign="bottom" |
SQLite, PostgreSQL, MySQL и MariaDB
| width="158" valign="bottom" |
[[BSD|Модифицированная лицензия BSD]]
| width="220" valign="bottom" |
[http://trac.edgewall.org/ trac.edgewall.org] {{Wayback|url=http://trac.edgewall.org/ |date=20130408044448 }}
| width="89" valign="bottom" |
21.06.2017
| width="68" valign="bottom" |
1.2.2
|-
| width="139" valign="bottom" |
[[Redmine]]
| width="264" valign="bottom" |
дополнительно отслеживает ошибки
| width="61" valign="bottom" |
Ruby
| width="129" valign="bottom" |
MySQL, PostgreSQL, SQLite, Oracle.
| width="158" valign="bottom" |
[[GNU General Public License]]
| width="220" valign="bottom" |
[http://redmine.org/ redmine.org] {{Wayback|url=http://redmine.org/ |date=20110427025429 }}
| width="89" valign="bottom" |
09.12.2018
| width="68" valign="bottom" |
4.0.0
|-
| width="139" valign="bottom" |
[[USVN]]
| width="264" valign="bottom" |
утилита для создания и управления доступом к репозиториям, специализирована под SVN
| width="61" valign="bottom" |
PHP
| width="129" valign="bottom" |
MySQL, SQLlite
| width="158" valign="bottom" |
CeCill (GPL совместимая лицензия).
| width="220" valign="bottom" |
[http://www.usvn.info/ www.usvn.info] {{Wayback|url=http://www.usvn.info/ |date=20110512203822 }}
| width="89" valign="bottom" |
13.01.2012
| width="68" valign="bottom" |
1.0.6
|-
| width="139" valign="bottom" |
[[ViewVC]]
| width="264" valign="bottom" |
без управления пользователями, не требует поддержки DAV web-сервером.
| width="61" valign="bottom" |
Python
| width="129" valign="bottom" |
MySQL
| width="158" valign="bottom" |
Two-clause Berkeley-style
| width="220" valign="bottom" |
[http://www.viewvc.org/ www.viewvc.org] {{Wayback|url=http://www.viewvc.org/ |date=20110504061029 }}
| width="89" valign="bottom" |
02.12.2010
| width="68" valign="bottom" |
1.1.8
|-
| width="139" valign="bottom" |
[[WebSVN]]
| width="264" valign="bottom" |
интерфейс просмотра к SVN
| width="61" valign="bottom" |
PHP
| width="129" valign="bottom" |
XML
| width="158" valign="bottom" |
[[GNU GPL]]
| width="220" valign="bottom" |
[http://websvn.tigris.org/ websvn.tigris.org] {{Wayback|url=http://websvn.tigris.org/ |date=20060612095253 }}
| width="89" valign="bottom" |
12.10.2010
| width="68" valign="bottom" |
2.3.2
|-
| width="139" valign="bottom" |
[[SVNManager]]
| width="264" valign="bottom" |
утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами)
| width="61" valign="bottom" |
PHP
| width="129" valign="bottom" |
MySQL or SQLite
| width="158" valign="bottom" |
| width="220" valign="bottom" |
[http://svnmanager.sourceforge.net/ svnmanager.sourceforge.net] {{Wayback|url=http://svnmanager.sourceforge.net/ |date=20110430221237 }}
| width="89" valign="bottom" |
28.01.2012
| width="68" valign="bottom" |
1.09
|-
| width="139" valign="bottom" |
[[Submin]] (MIT)
| width="264" valign="bottom" |
утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории
| width="61" valign="bottom" |
Python
| width="129" valign="bottom" |
| width="158" valign="bottom" |
[http://freshmeat.net/tags/mitx-consortium-license MIT/X] {{Wayback|url=http://freshmeat.net/tags/mitx-consortium-license |date=20110606111117 }}
| width="220" valign="bottom" |
| width="89" valign="bottom" |
24.12.2012
| width="68" valign="bottom" |
2.1
|-
| width="139" valign="bottom" |
[[cSvn]]
| width="264" valign="bottom" |
web-интерфейс просмотра Subversion-репозиториев
| width="61" valign="bottom" |
C
| width="129" valign="bottom" |
| width="158" valign="bottom" |
[https://csvn.radix.pro/csvn-ui/trunk/LICENSE/ RADIX-1.0]
| width="220" valign="bottom" |
[https://csvn.radix.pro/csvn-ui/trunk/README.md/ csvn.radix.pro] {{Wayback|url=https://csvn.radix.pro/csvn-ui/trunk/README.md/ |date=20220316022233 }}
| width="89" valign="bottom" |
17.11.2020
| width="68" valign="bottom" |
0.1.3
|}


=== Этимология ===
== Примечания ==
От {{этимология:|fr}}
{{примечания|2}}


=== Фразеологизмы и устойчивые сочетания ===
== Ссылки ==
*
{{Навигация
| Тема        = Subversion
| Портал      = Свободное программное обеспечение
| Викисловарь  =
| Викиучебник  = AROS/Репозиторий
| Викицитатник =
| Викитека    =
| Викивиды    =
| Викисклад    =
| Метавики    =
| Проект      =
}}
* [http://svnbook.red-bean.com/nightly/ru/svn-book.html Официальная книга по Subversion (русский язык)] {{Wayback|url=http://svnbook.red-bean.com/nightly/ru/svn-book.html |date=20130801103802 }}
* Бен Коллинз-Сассман, Брайан У. Фицпатрик, К. Майкл Пилато. [http://svnbook.red-bean.com/index.en.html Управление версиями в Subversion] {{Wayback|url=http://svnbook.red-bean.com/index.en.html |date=20081219171020 }}.
* [http://www.collab.net/community/subversion/articles/ Статьи] {{Wayback|url=http://www.collab.net/community/subversion/articles/ |date=20080602061432 }} на CollabNet Subversion Community {{ref|en}}
* John Ferguson Smart. [http://www.javaworld.com/javaworld/jw-01-2008/jw-01-svnmerging.html Merging and branching in Subversion 1.5] {{Wayback|url=http://www.javaworld.com/javaworld/jw-01-2008/jw-01-svnmerging.html |date=20080526105806 }} {{ref|en}}.
* [http://blog.red-bean.com/sussman/?p=79 Version Control and «the 80 %»] {{Wayback|url=http://blog.red-bean.com/sussman/?p=79 |date=20080608221141 }} {{ref|en}} Бен Коллинз-Сассман о будущем Subversion и о распределённых системах. [http://lib.custis.ru/Version_Control_and_%E2%80%9Cthe_80%25%E2%80%9D Русский перевод статьи] {{Wayback|url=http://lib.custis.ru/Version_Control_and_%E2%80%9Cthe_80%25%E2%80%9D |date=20140407041427 }}.
* Статья [http://icons4swrus.com/subversion-na-svoem-kompyutere.php «Без дизайна иконок: Репозиторий Subversion на своём компьютере»] {{Wayback|url=http://icons4swrus.com/subversion-na-svoem-kompyutere.php |date=20090314050333 }}
<!-- Википедия — не каталог ссылок. Не размещайте, пожалуйста, спам-ссылки. Они всё равно будут откачены, а Вы можете быть заблокированы. -->


=== Библиография ===
{{Системы управления версиями}}
*
{{URI scheme}}
{{Хорошая статья|Информатика|Программное обеспечение}}


<!-- Служебное: -->
[[Категория:Subversion|*]]
{{improve|fr|морфо|транскрипция/мн|пример|синонимы|гиперонимы|этимология}}
[[Категория:FSF/UNESCO]]
{{Категория|язык=fr|||}}
[[Категория:Кроссплатформенное программное обеспечение]]
{{длина слова|10|fr}}
[[Категория:Программное обеспечение для macOS]]
{{multilang|}}
[[Категория:Программное обеспечение для Windows]]
[[Категория:Программное обеспечение для Linux]]
[[Категория:Свободное программное обеспечение, написанное на Си]]

Текущая версия от 07:40, 30 марта 2026

Шаблон:Много внутренних ссылок Шаблон:Нет сносок Шаблон:Значения Шаблон:Карточка программы

Subversion<ref>Английское слово Шаблон:Lang-en2 можно перевести двояко — как «свержение» (subversion) и как «подверсия» (sub-version)</ref> (также известная как «SVN»<ref>По названию программы-клиента для командной строки, входящей в состав пакета</ref>) — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией Шаблон:Iw. С 2010 года Subversion является одним из проектов Apache Software Foundation и официально называется Apache Subversion (зарегистрированный товарный знак<ref>Шаблон:Cite web</ref>).

Цель проекта в начале разработки — заменить<ref>Subversion Features Шаблон:WaybackШаблон:Ref</ref><ref>The Risks of Distributed Version Control Шаблон:Wayback Бен Коллинз-Сассман Шаблон:Ref</ref> распространённую на тот момент систему Concurrent Versions System (CVS), которая на сегодняшний день считается морально устаревшей<ref>CVS is out, Subversion is in Шаблон:WebarchiveШаблон:Ref Red Hat magazine, август 2005 г.</ref><ref>CVS — sourceforge Шаблон:Webarchive</ref><ref>Шаблон:Cite web</ref>. Subversion обладает всеми основными функциями CVS и избавлена от ряда недостатков последней.

Subversion всё ещё используется некоторыми сообществами разработчиков открытого программного обеспечения (в том числе сообществами, ранее использовавшими CVS), но почти все крупные проекты перешли на DVCS. В числе последних пользователей Subversion среди открытых проектов остаётся FreeBSD, но и они анонсировали переход на Git<ref>Шаблон:Cite web</ref>. Довольно долго использовали Subversion такие известные проекты, как Apache, GCC, FFmpeg, LLVM, Free Pascal. Subversion также используется в закрытых проектах и корпоративной сфере, но насколько широко — оценить непросто. Хостинг Subversion, в том числе для проектов с открытым кодом, также предоставляют популярные хостинг-проекты SourceForge.net, Tigris.org, Google Code и BountySource.

В 2007 году аналитическая компания Forrester, сравнивая преимущества и недостатки различных систем, оценила Subversion как «единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration and Change Management (SCCM)».<ref>Шаблон:Cite web</ref>

По данным статистики использования пакетов Linux-дистрибутивов Debian<ref>Шаблон:Cite web</ref> и Ubuntu<ref>Шаблон:Cite web</ref>, количество активных пользователей Subversion достигло максимума примерно в 2010 году, и начало снижаться с 2016 года. Тем не менее, количество проектов, использующих Subversion всё ещё больше, чем использующих CVS, Mercurial и Bazaar (по состоянию на август 2019 года).

В качестве официальной документации позиционируется<ref>см. http://subversion.apache.org/docs/ Шаблон:Wayback Шаблон:Ref</ref> книга издательства O’Reilly Media, выложенная в свободный доступ<ref name="svn-book">Шаблон:Cite web</ref> и дописываемая авторами по мере выхода новых версий SVN. Там же публикуются её переводы на ряд языков, в том числе русский, но при том, что англоязычные версии книги сейчас описывают версии 1.8 и 1.7, на русском языке имеются лишь книги, описывающие версии до 1.4 включительно<ref name="svn-book-ru">Шаблон:Cite web</ref>.

История

Разработка Subversion была начата в 2000 году по инициативе и при финансовой поддержке CollabNet. Инициаторы проекта хотели создать свободную систему управления версиями, в основном похожую на CVS, но лишённую её ошибок и неудобств. В то время не существовало лучших программ этого класса со свободной лицензией, CVS была стандартом де-факто среди разработчиков свободного программного обеспечения. Выбрав её за основу, разработчики Subversion надеялись упростить разработку за счёт использования уже проверенных концепций и в то же время облегчить переход на новую систему многочисленным пользователям CVS.<ref>Шаблон:Cite web</ref>

Основные события истории развития Subversion.

  • 31 августа 2001 года команда разработчиков перешла с CVS на Subversion для управления собственным исходным кодом: Subversion стала «самодостаточной».
  • 23 февраля 2004 года вышла версия 1.0.0<ref>Список изменений Шаблон:WaybackШаблон:Ref</ref>. К этому времени Subversion уже использовалась примерно на 1400 серверах с открытым доступом.<ref>Goliath Business News Шаблон:Webarchive</ref>
  • 29 сентября 2004 года появился релиз 1.1.0. Среди основных нововведений — новый формат хранилища на основе обычных файлов (FSFS), в дополнение к существовавшему ранее (с использованием Berkeley DB).<ref>Шаблон:Cite web</ref>
  • 21 мая 2005 года вышел релиз 1.2.0, в котором добавлена возможность блокировки файлов,<ref>Шаблон:Cite web</ref> что позволило улучшить поддержку клиентов WebDAV/DeltaV, в том числе, реализовать автоматическое создание новых версий при редактировании файлов с помощью таких клиентов. Начиная с этого релиза Subversion по умолчанию использует FSFS для новых хранилищ.
  • 30 декабря 2005 года вышел релиз 1.3.0.<ref>Шаблон:Cite web</ref> Основными изменениями являются возможность устанавливать права доступа к каталогам при использовании svnserve, дополнительные возможности команд, а также множество улучшений для разработчиков.
  • 10 сентября 2006 года вышел релиз 1.4.0.<ref>Шаблон:Cite web</ref> Он поддерживает работу с BerkeleyDB 4.4 и может использовать её функции самовосстановления. Ранее при сбоях Subversion хранилище, использующее BerkeleyDB, могло остаться в «заклиненном» состоянии и требовалось вмешательство администратора для восстановления работы системы (при использовании FSFS этой проблемы нет).
  • 19 июня 2008 года вышел релиз 1.5.0<ref>Шаблон:Cite web</ref>, в нём сделано множество улучшений, самым значительным из которых является базовая поддержка отслеживания слияний (англ. Шаблон:Lang-en2). Эта возможность делает процесс слияния пакетов в Subversion более простым и надёжным.
  • 20 марта 2009 года вышел релиз 1.6.0.<ref>Шаблон:Cite web</ref> Улучшения поддержки svn:externals, обнаружение «конфликтов деревьев» (англ. Шаблон:Lang-en2), улучшение эффективности хранения данных в репозитории и другие внесённые изменения.
  • В феврале 2010 года проект Subversion был официально переведён под управление Apache Software Foundation (ASF)<ref>Subversion переведена под контроль Apache Software Foundation Шаблон:Wayback, nixp.ru</ref>. Президент Subversion Corporation и директор Open Source в WANdisco выступил с видеообращением, в котором с энтузиазмом пообещал всем, что переход Subversion к ASF будет лишь способствовать более активному развитию проекта.<ref>Subversion & the Move to the Apache Software FoundationШаблон:Недоступная ссылка, (видеообращение президента Subversion Corporation)</ref>
  • 11 октября 2011 года состоялся релиз 1.7<ref>Шаблон:Cite web</ref>. Основные улучшения: теперь только одна папка .svn в корне рабочей копии; ускорена работа по HTTP; добавлена утилита svnrdump; новая команда svn patch.
  • 18 июня 2013 года вышел релиз 1.8.0.<ref name="release-notes-1_8">Шаблон:Cite web</ref> Apache Subversion 1.8 является расширением всех предыдущих выпусков Subversion.
Версия Дата первоначального выпуска Последняя версия Дата последнего выпуска Статус
Шаблон:Версия 2004-02-23 1.0.9 2004-10-13 Больше не поддерживается
Шаблон:Версия 2004-09-29<ref>Шаблон:Cite web</ref> 1.1.4 2005-04-01 Больше не поддерживается
Шаблон:Версия 2005-05-21<ref>Шаблон:Cite web</ref> 1.2.3 2005-08-19 Больше не поддерживается
Шаблон:Версия 2005-12-30<ref>Шаблон:Cite web</ref> 1.3.2 2006-05-23 Больше не поддерживается
Шаблон:Версия 2006-09-10<ref>Шаблон:Cite web</ref> 1.4.6 2007-12-21 Больше не поддерживается
Шаблон:Версия 2008-06-19<ref>Шаблон:Cite web</ref> 1.5.9 2010-12-06 Больше не поддерживается
Шаблон:Версия 2009-03-20<ref>Шаблон:Cite web</ref> 1.6.23 2013-05-30 Больше не поддерживается
Шаблон:Версия 2011-10-11<ref>Шаблон:Cite web</ref> 1.7.22 2015-08-12 Больше не поддерживается
Шаблон:Версия 2013-06-18<ref>Шаблон:Cite web</ref> 1.8.19 2017-08-10 Больше не поддерживается
Шаблон:Версия 2015-08-05<ref>Шаблон:Cite web</ref> 1.9.12 2019-07-24 Больше не поддерживается
Шаблон:Версия 2018-04-13<ref>Шаблон:Cite web</ref> 1.10.8 2022-04-12 Больше не поддерживается
Шаблон:Версия 2018-10-30<ref>Шаблон:Cite web</ref> 1.11.1 2019-01-11 Больше не поддерживается
Шаблон:Версия 2019-04-24<ref>Шаблон:Cite web</ref> 1.12.2 2019-07-24 Больше не поддерживается
Шаблон:Версия 2019-10-30<ref>Шаблон:Cite web</ref> 1.13.0 2019-10-30 Больше не поддерживается
Шаблон:Версия 2020-05-27<ref>Шаблон:Cite web</ref> 1.14.5<ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref><ref>Шаблон:Cite web</ref> 2024-12-08 Полностью поддерживается, LTS
Шаблон:Версия 20XX 1.15.0 (Ещё не выпущено) В разработке
Шаблон:Версия

Общие сведения

Возможности

  • Хранение полной истории изменений отслеживаемых объектов (файлов, каталогов, символьных ссылок<ref>работа с символьными ссылками поддерживается только в рабочих копиях под UNIX-системами</ref>) в централизованном хранилище (репозитории), в том числе при изменении атрибутов («метаданных»), перемещении, переименовании и удалении
  • Копирование объектов с разветвлением истории — при копировании в хранилище появляются два отдельных объекта с общей историей
  • Поддержка переноса изменений между копиями объектов, в том числе полного слияния копий (в рабочей копии; без объединения истории)
  • Эмуляция<ref name="no_internal_concept_of_a_branch">Ветви и метки в Subversion не являются независимым измерением хранилища. См. The Key Concepts Behind Branching Шаблон:Wayback</ref> ветвления:
    • создание ветвей с помощью копирования каталогов и последующая независимая работа с ними
    • слияние ветвей с автоматическим определением и переносом изменений
  • Эмуляция<ref name="no_internal_concept_of_a_branch" /> меток (копированием каталогов)
  • История изменений и копии объектов (в том числе ветви и метки) хранятся в виде связанных разностных копий — «дешёвых» (не требующих больших временны́х и дисковых ресурсов) при создании и хранении
  • Поддержка конкурентной (в том числе одновременной, с изоляцией транзакций) многопользовательской работы с хранилищем и, в большинстве случаев, автоматическим слиянием изменений различных разработчиков (в рабочей копии)
  • Фиксации изменений в хранилище (в том числе многообъектные) организуются в виде атомарных транзакций
  • Сетевой обмен между сервером и клиентом предусматривает передачу только различий между рабочей копией и хранилищем
  • Обеспечивается одинаково эффективная работа как с текстовыми, так и с двоичными файлами
  • Различные варианты доступа к хранилищу, в том числе:
    • непосредственный доступ на локальной файловой системе;
    • по собственному сетевому протоколу;
    • через веб-сервер по протоколу WebDAV/DeltaV.
  • Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами
  • Возможность зеркалирования хранилища
  • Два возможных внутренних формата хранилища (англ. Шаблон:Lang-en2): база данных или набор обычных файлов
  • Интернационализированные сообщения программы (используются настройки локали)
  • Библиотеки для языков PHP, Python, Perl, Java позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках
  • Многоуровневая архитектура библиотек, изначально рассчитанная на клиент-серверную модель

Модель работы

Subversion — централизованная система (в отличие от распределённых систем, таких как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере.

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

При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.

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

Типы репозиториев

Subversion предлагает два варианта организации репозиториев<ref>Термины хранилище и репозиторий являются синонимами.</ref>. Репозитории первого типа используют для хранения базы данных на основе Berkeley DB, репозитории второго типа — обычные файлы специального формата (доступ к данным организуется с помощью собственных библиотек, без использования сторонних баз данных). Разработчики Subversion часто называют хранилище «файловой системой», поэтому второй тип получил название FSFS, то есть (версионированная) файловая система (англ. Шаблон:Lang-en2) поверх (обычной) файловой системы.

Оба типа репозиториев обеспечивают достаточную надёжность при правильной организации<ref>Глава 5. Администрирование хранилища Шаблон:Wayback в книге «Управление версиями в Subversion»</ref> (Berkeley DB использует блокировки файлов, поэтому её нельзя использовать на некоторых сетевых файловых системах, не поддерживающих блокировок), каждая из них обладает своими преимуществами и недостатками. Считается, что FSFS легче правильно настроить, она требует меньшего внимания от администратора. Кроме того, до релиза 1.4 хранилища, использующие Berkeley DB, могли при определённых условиях оказаться в так называемом заклиненном (англ. Шаблон:Lang-en2) состоянии; требовалось вмешательство администратора для восстановления его работоспособности.

Начиная с релиза 1.2 для новых хранилищ по умолчанию используется FSFS. При выпуске релиза 1.8 использование Berkeley DB было объявлено нерекомендованным<ref name="release-notes-1_8" />. Новые возможности, которые будут добавлены в следующих релизах, могут не работать на серверах, использующих Berkeley DB. В дальнейшем поддержка Berkeley DB может быть прекращена.

Доступ к репозиторию

Subversion предоставляет следующие способы доступа к репозиторию:

  • прямой доступ к репозиторию на диске (на локальной или сетевой файловой системе);
  • удалённый доступ по протоколу WebDAV/DeltaV поверх HTTP (или HTTPS) с использованием модуля mod_dav_svn для веб-сервера Apache 2;
  • удалённый доступ с использованием собственного протокола SVN:
    • на выделенном сетевом соединении (по умолчанию на TCP-порту 3690);
    • через стандартный ввод-вывод (в том числе через средства удалённого CLI, например, SSH).

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

Основные концепции

Файловая система

Рис. 1. Двумерное представление файловой системы в Subversion

С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему. Объекты в хранилище (файлы и каталоги) идентифицируются двумя «координатами»: именем и номером ревизии. Другими словами, хранилище представляет собой массив мгновенных снимков (ревизий) дерева файлов и каталогов, индексируемый номером ревизии. Каждый такой снимок — обычная (одномерная) файловая система.

При необходимости указания на конкретную ревизию объекта используется запись вида: имя@ревизия, например, /main.c@29 — файл /main.c в ревизии 29. Такое указание ревизии, используемое для уточнения имени, называется стержневая ревизия (англ. Шаблон:Lang-en2).

На рис. 1 показано графическое представление файловой системы: вертикальная ось соответствует множеству имён, горизонтальная — множеству ревизий.

Имена файлов

Имя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах: существует только один корневой каталог, элементы пути разделяются косой чертой («/»). Объектами файловой системы являются файлы и каталоги (а также символические ссылки, которые эмулируются из обычных файлов путём установки атрибута svn:special).

Номера ревизий

Номер ревизии в Subversion — это натуральное число (или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть N-я ревизия — это состояние хранилища после N-й фиксации.

В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние четырёх файлов и двух каталогов, существовавших в хранилище на тот момент.

Номер ревизии является аналогом времени в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а бо́льшие — поздним.

  • Минимальный номер ревизии 0 (ноль) соответствует изначальному состоянию хранилища, когда ещё не было зафиксировано ни одной правки. В нулевой ревизии хранилище содержит только пустой корневой каталог.
  • Максимальный номер ревизии соответствует самому последнему состоянию хранилища, то есть состоянию после фиксации последней правки. Вместо указания номера последней ревизии можно использовать ключевое слово HEAD (головная ревизия); это удобно, поскольку номер головной ревизии увеличивается при каждой фиксации изменений.

Номер ревизии можно рассматривать как некую временну́ю отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана (свойство svn:date). Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён.

Оперативная и стержневая ревизии
Файл:Subversion peg revision RU.svg
Рис. 2. Указание стержневой ревизии

Номер ревизии используется в двух различных контекстах:

Ревизия называется оперативной, если она указывает ревизию или диапазон ревизий, к которому должна быть применена операция, например:

svn log -r 199:230 http://some.path

В данном примере выполняется команда svn log для диапазона ревизий 199:230, который и является диапазоном оперативных ревизий.

Однако указание только имени файла и оперативной ревизии иногда может неоднозначно указывать на объекты хранилища. Например, в ситуации, показанной на рис. 2, возникает неоднозначность при выполнении следующей команды:

svn log -r 29:33 http://some.path/bar.txt

В команде указан диапазон оперативных ревизий (29:33), но области, выделенные на рисунке голубым и зелёным фоном, в равной степени можно считать историей файла /bar.txt в диапазоне ревизий 29:33. В подобных случаях необходимо указывать ещё и стержневую ревизию для разрешения неоднозначности. Стержневая ревизия — это номер ревизии, указанный в дополнение к URL объекта файловой системы (используется запись вида «URL@ревизия»). Название происходит от английского слова Шаблон:Lang-en2, которое можно перевести как «стержень» или «колышек». Стержневая ревизия отмечает ту цепочку состояний, которой принадлежит указанная пара URL@ревизия и, таким образом, однозначно идентифицирует объект хранилища, к которому должна быть применена команда. В приведённом ниже примере первая команда выведет историю, выделенную на рисунке голубым фоном, а вторая — историю, выделенную зелёным фоном:

svn log -r 29:33 http://some.path/file.txt@32
svn log -r 29:33 http://some.path/bar.txt@34

В качестве стержневой ревизии следует указывать как можно более позднее состояние интересующего объекта. Причина этого в том, что цепочка состояний однозначно отслеживается «назад», но не «вперёд». Например, URL со стержневой ревизией http://some.path/foo.txt@31 принадлежит двум цепочкам состояний (выделены соответственно зелёным и серым фоном). Из этих двух цепочек указанный URL адресует серую цепочку, то есть при движении «вперёд» от стержневой ревизии операции копирования игнорируются.

Операции над файловой системой

Над объектами файловой системы в хранилище Subversion могут быть произведены перечисленные ниже операции<ref>Здесь перечислены операции именно с точки зрения файловой системы хранилища. В рабочей копии действия над объектами несколько иные. Однако изменения в рабочей копии, будучи зафиксированными, вызовут в хранилище описанные здесь действия. Например, команда svn move в рабочей копии произведёт операции D, A+ в хранилище.</ref> (см. рис. 1). В скобках указано краткое именование операции в обозначениях команды svn status.

  • Добавление (A). Добавление объекта в файловую систему. Добавленный объект не имеет истории ревизий. Пример на рисунке:
    • файл /main.c был добавлен в ревизии 27.
  • Модификация (M). Модификация объекта, например, изменение содержимого файла или изменение свойств файла или каталога. Пример на рисунке:
    • файл /main.c был модифицирован в ревизии 28.
  • Удаление (D). Удаление файла из головной и последующих ревизий. При этом файл остаётся в предыдущих ревизиях. Пример на рисунке:
    • файл /main.c был удалён в ревизии 30.
  • Добавление с историей (A+). Представляет собой копирование объекта внутри файловой системы хранилища, то есть объект имя_источника@ревизия_источника копируется в имя_копии@HEAD. Скопированный объект наследует от источника историю ревизий до момента копирования (наследование истории показано на рисунке пунктирными связями). Примеры на рисунке:
    • в ревизии 29 каталог /tags/R1 был скопирован с каталога /trunk@27;
    • в ревизии 31 файл /main.c был скопирован с /main.c@29, то есть с более ранней ревизии самого себя, таким образом, произведено восстановление ранее удалённого (в ревизии 30) файла с сохранением истории ревизий.
  • Замена (R+). Имеет место в случае, когда в одной ревизии произведено и удаление объекта (D), и добавление с историей (A+) объекта с тем же самым именем. Хотя имя при операции замены остаётся неизменным, Subversion рассматривает объект до и после замены как два различных объекта с различными историями ревизий (история старого заканчивается в точке замены, история нового наследуется от источника копирования и продолжается далее). Пример на рисунке:
    • в ревизии 30 файл /file.txt был заменён: старый файл /file.txt удалён, а новый файл с тем же именем скопирован с файла /bar.txt@29.

Фиксация изменений

Рабочая копия

Рабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию (скрытые каталоги с именем .svn). Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя. Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является каталог. Содержимое каталога можно извлечь не полностью: например, можно исключить отдельные файлы или подкаталоги. Однако извлечь из хранилища отдельный файл как рабочую копию невозможно.

Любой подкаталог рабочей копии Subversion 1.6 и более ранних версий также является полноценной рабочей копией, поскольку в каждом каталоге хранятся его служебные данные (каталоги .svn). Начиная с версии 1.7 в каждой рабочей копии присутствует только один каталог .svn в корне её каталога.

Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её. Поэтому, имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика.

В служебных каталогах рабочей копии, помимо прочего, хранится так называемая чистая копия (англ. Шаблон:Lang-en2) — файлы рабочей копии в неизменённом виде, как они были извлечены из хранилища (для svn это ревизия с именем BASE). Наличие чистой копии позволяет быстро и без обращения к хранилищу выполнять операции просмотра и отката локальных изменений. Однако размер рабочей копии на диске примерно в два раза больше (данные + чистая копия данных), чем размер самих данных. Такой подход обусловлен тем, что дисковые ресурсы дешевле и доступнее, чем ресурсы сети передачи данных.

Как правило, создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений, поскольку зафиксировать в хранилище можно только изменения, сделанные в рабочей копии. Исключением являются операции, которые могут быть выполнены прямо в хранилище без создания рабочей копии.

Транзакции

Работа с хранилищем в Subversion организована в форме транзакций со свойствами атомарности и изоляции из набора свойств ACID. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.

  • Атомарность фиксаций (англ. Шаблон:Lang-en2) — изменения в нескольких файлах или каталогах фиксируются единой транзакцией, порождая при этом одну ревизию. В случае неудачной фиксации, при любом сбое или ошибке, система гарантирует, что хранилище не окажется в частично изменённом состоянии — в хранилище попадут либо все изменения, либо (при неудаче) — ни одного.
  • Изоляция гарантирует, что промежуточные состояния хранилища внутри транзакции не видны другим транзакциям и пользователям. Например, если один пользователь фиксирует одной транзакцией изменения в нескольких файлах, то другие пользователи не могут увидеть такого состояния хранилища, в котором часть файлов уже изменена, а часть — не изменена.

Данные свойства не гарантируются для рабочей копии Subversion — она, в отличие от хранилища, при сбое или прерывании может оказаться в промежуточном или заблокированном состоянии (то есть перед продолжением работы её потребуется восстановить командой svn cleanup или пересоздать заново).

Локальные и удалённые формы команд

Все команды клиента Subversion можно разделить на следующие группы:

  • модифицирующие рабочую копию;
  • модифицирующие хранилище;
  • модифицирующие и рабочую копию, и хранилище;
  • не модифицирующие ничего.

Структура хранилища

Структура проекта в хранилище

Формально Subversion не накладывает каких-либо ограничений на файловую структуру проекта — она может быть какой угодно в рамках правил именования объектов файловой системы. Тем не менее, существуют рекомендации, призванные облегчить работу с ветвями и метками. В простейшем случае в корневом каталоге хранилища рекомендуется создать как минимум три подкаталога:

/.
  branches
  tags
  trunk

Вся файловая структура проекта (основной линии разработки) должна содержаться в подкаталоге trunk, подкаталог branches должен содержать ветви проекта, а tags — метки. Например, следующая структура каталогов хранилища:

/.
  branches
    branch_1
  tags
    tag_1
    tag_2
  trunk

предполагает наличие у проекта (trunk) одной ветви «branch_1» и двух меток «tag_1» и «tag_2». Каждый из этих каталогов (trunk, branch_1, tag_1 и tag_2) содержит копию соответствующей версии проекта.

Если (под)проектов в хранилище несколько, то такая структура подкаталогов создаётся для каждого (под)проекта:

/.
  project1
    branches
    tags
    trunk
  project2
    branches
    tags
    trunk

То есть в корневом каталоге находятся каталоги проектов, и в каждом из них есть свои trunk, branches, tags, относящиеся только к этому проекту. Описанные структуры каталогов хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае.<ref>Структура проектов на C++ с использованием Subversion и Mxx_ru Шаблон:Wayback.</ref><ref>Хранение сложных проектов в репозитории и установка tag’ов на несколько проектов сразу Шаблон:Wayback.</ref>

Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий (путём импорта командой svnadmin load с параметром --parent-dir).

Ветви

Ошибка скрипта: Модуля «Основная статья» не существует. Subversion использует «файловую» модель (такую же, как и в Perforce<ref>Inter-File Branching in Perforce Шаблон:Webarchive</ref>) для реализации ветвей и меток, то есть ветвь является обычным каталогом (можно также сделать ветвь из одного файла, а не каталога). Новая ветвь создаётся командой svn copy. Ветвь может быть создана в любом каталоге хранилища, однако имеет смысл придерживаться описанных выше соглашений о том, где создавать новые ветви. Более подробная информация о ветвях приведена в разделах Ветвление и Слияние.

Метки

Создание метки также производится командой svn copy, то есть технически не отличается от создания ветви. Отличие только в способе использования: предполагается, что никто не будет изменять данные в метке (фиксировать в неё изменения). Например, на рис. 1 метка создана в ревизии 29: каталог /trunk из ревизии 27 скопирован под именем /tags/R1. Теперь, если не изменять данные в каталоге /tags/R1, то он навсегда останется точной копией каталога /trunk@27, то есть будет меткой.

Концепция меток, используемая в Subversion, отличается от концепции меток в других системах управления версиями. Обычно метка является символическим именем, которое адресует набор файлов и их состояние. В Subversion метка копирует набор файлов и их состояние. Метки-копии в Subversion имеют свои достоинства и недостатки.

Достоинства:

  • метка видна в структуре каталогов, можно сделать удобную древовидную организацию меток.

Недостатки:

  • трудно узнать, в какие метки вошёл файл (то же для каталога);
  • если права доступа установлены индивидуально<ref>Шаблон:Cite web</ref> для каталогов, то метка эти права не наследует;
  • содержимое метки может быть изменено;
  • если из метки создать рабочую копию и зафиксировать из этой рабочей копии какие-либо изменения, то это изменит саму метку, а не те данные, которые были помечены. Правильным способом работы «от метки» является создание рабочей копии не из метки, а из того, что является источником этой метки.

Свойства (properties)

Одной из важных возможностей Subversion является поддержка свойств, то есть текстовых пар имя = значение, которые могут быть установлены для объектов в хранилище. Свойства используются в двух различных контекстах: для объектов файловой системы и для ревизий.

Свойства объектов файловой системы

Каждому файлу или каталогу в хранилище может быть присвоен набор свойств. Изменения свойств сохраняются в истории так же, как и изменения в файловой системе. Пользователи могут устанавливать свойства с любыми именами; существует также предопределённый набор служебных свойств, которые используются клиентской программой Subversion (имена служебных свойств имеют префикс "svn: ").

Свойства файлов
svn:executable
Делает файл исполняемым (для рабочих копий под операционными системами семейства UNIX).
svn:mime-type
Хранит MIME-тип файла. Влияет на способ работы команд, показывающих разницу файлов, а также объединяющих изменения (merging).
svn:keywords
Список ключевых слов (англ. Шаблон:Lang-en2), которые будут заменены в файле соответствующими значениями. Чтобы замена произошла, ключевое слово должно присутствовать в файле в виде $keyword$. Используется для того, чтобы автоматически обновлять в файле значения, меняющиеся от версии к версии (например, номер ревизии).
svn:eol-style
Определяет правило преобразования символов конца строки (англ. Шаблон:Lang-en2) в текстовом файле. Используется в случаях, когда файл должен иметь конкретный тип символов EOL. Обычно используется «native» — при этом тип символов конца строки соответствует принятому в той операционной системе, в которой происходит создание рабочей копии.
svn:needs-lock
Означает, что при извлечении из хранилища файл будет доступен только для чтения. Это свойство предназначено для использования совместно с механизмом блокировки. Запрет записи в файл является напоминанием того, что надо получить блокировку на этот файл, прежде чем его редактировать: при получении блокировки клиентская программа Subversion автоматически делает файл доступным для записи (снятие блокировки снова делает файл защищённым от модификаций). Блокировки могут быть использованы и без установки этого свойства. Однако делать это не рекомендуется, так как существует риск того, что другой пользователь может начать редактировать заблокированный файл, и это обнаружится только при фиксации изменений.
svn:special
Свойство не предназначено для установки или модификации пользователями. В настоящее время используется для хранения символьных ссылок в репозитории. Когда символьная ссылка добавляется в репозиторий, в репозитории создаётся файл с установленным свойством svn:special. Когда этот файл извлекается в UNIX-подобной системе, клиентская программа Subversion преобразует его обратно в ссылку.
svn:mergeinfo
Хранит информацию о том, из каких путей было произведено слияние в этот файл. Свойство введено в версии 1.5, оно используется для отслеживания слияний (англ. Шаблон:Lang-en2). Представляет собой набор строк вида имя_файла: диапазон_ревизий. Здесь имя_файла — полное (с путём от корня файловой системы репозитория) имя файла или каталога, откуда было произведено слияние указанного диапазона ревизий. Строки модифицируются автоматически при операциях слияния; при последующих слияниях Subversion учитывает ранее вписанные строки, избегая тем самым повторных слияний одних и тех же изменений. Не рекомендуется изменять свойство svn:mergeinfo вручную — это может нарушить механизм отслеживания слияний.
Свойства каталогов
svn:ignore
Список шаблонов имён файлов и каталогов, которые клиентская программа Subversion будет игнорировать в данном каталоге. Это свойство аналогично файлу .cvsignore в CVS. Как правило, свойство настраивается таким образом, чтобы клиентская программа «не видела» файлы и каталоги, которые автоматически создаются различными программами и не должны быть версионированы (например, объектные файлы, временные файлы и т. п.). Действие этого свойства не распространяется на подкаталоги.
svn:externals
Позволяет автоматически извлечь в рабочую копию набор каталогов, указав их URL (можно даже из другого хранилища).
svn:mergeinfo
То же, что и для файлов.

Свойства ревизий

Второй тип объектов, для которых существуют свойства, — это сами ревизии. В этом случае имена свойств также могут быть любыми; некоторые свойства с префиксом "svn: " имеют специальное значение. Отличие свойств ревизий от свойств объектов файловой системы в том, что для первых понятие истории версий не применимо (поскольку конкретное значение свойства приписано одной ревизии). Другими словами, свойства ревизий можно изменить, но старое значение при этом теряется. По умолчанию изменение свойств ревизий запрещено; для разрешения администратор должен создать скрипт (англ. Шаблон:Lang-en2) обработки события pre-revprop-change.

svn:date
Дата и время создания ревизии.
svn:author
Имя пользователя, который зафиксировал изменения, вошедшие в эту ревизию.
svn:log
Описание изменений, зафиксированных в этой ревизии (текст, введённый пользователем при фиксации изменений).

Как правило, свойства ревизий изменяются только администратором хранилища в целях исправления некорректных данных. Например, если пользователь забыл указать текстовое описание при фиксации своих изменений, то администратор может создать это описание путём редактирования свойства svn:log.

Использование Subversion

Рабочий цикл

Типичная итерация рабочего цикла с Subversion включает следующие этапы.

  • Обновление рабочей копии из хранилища (svn update) или её создание (svn checkout).
  • Изменение рабочей копии. Изменения каталогов и информации о файлах производится средствами Subversion, в изменении же (содержимого) файлов Subversion никак не задействован — изменения производятся программами, предназначенными для этого (текстовые редакторы, средства разработки и т. п.):
    • новые (ещё не зафиксированные в хранилище) файлы и каталоги нужно добавить (команда svn add), то есть передать под управление версиями;
    • если файл или каталог в рабочей копии нужно удалить, переименовать, переместить или скопировать, необходимо использовать средства Subversion (svn mkdir, svn delete, svn move, svn copy);
    • просмотр состояния рабочей копии и локальных (ещё не зафиксированных) изменений (svn info, svn status, svn diff);
    • любые локальные изменения, если они признаны неудачными, можно откатить (svn revert).
  • При необходимости — дополнительное обновление, для получения изменений, зафиксированных в хранилище другими пользователями и слияния этих изменений со своими (svn update).
  • Фиксация своих изменений (и/или результатов слияния) в хранилище (svn commit).

Ветвление

Ветвление является важным аспектом работы систем управления версиями, поскольку типичные приёмы<ref>Типовые примеры Шаблон:Wayback, раздел в книге «Управление версиями в Subversion, версия 1.4»</ref> управления версиями (по крайней мере, при разработке программного обеспечения) включают в себя использование ветвей. Subversion обладает достаточно развитыми возможностями для ветвления и слияния (однако не поддерживает слияние переименованных файлов и каталогов).

Файл:Subversion project visualization ru.svg
Рис. 3. Пример эволюции ветвей в Subversion

На рис. 3 условно показан пример эволюции ветвей в хранилище. Зелёным цветом показана основная линия разработки проекта (англ. Шаблон:Lang-en2), жёлтым — ветви, синим — метки, пурпурным — ветвь, разработка которой прекращена. Красными стрелками показаны слияния изменений.

Создание ветвей

Новая ветвь (а также метка) создаётся командой svn copy, которая создаёт в хранилище копию с наследованием истории ревизий источника (операция A+). Для создания ветвей всегда следует использовать «удалённую» форму команды svn copy, например:

svn copy http://.../trunk/dir http://.../branches/branch_name -m "Creating a branch of dir"

Полученная копия будет ветвью (или меткой, в зависимости от способа работы с ней). В дальнейшем изменения, сделанные на ветви, могут быть внесены в источник, из которого была создана эта ветвь, такое распространение изменений называется слияние (англ. Шаблон:Lang-en2).

Операции копирования в Subversion дешёвые (англ. Шаблон:Lang-en2), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом<ref>Bubble-Up Method Шаблон:WaybackШаблон:Ref</ref>, что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогично жёсткой ссылке), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однако слияние — необходимое дополнение к ветвлению — выполняется в Subversion медленнее, чем в других современных системах управления версиями).

Работа с ветвями

В целом работа на ветви не отличается от работы на основной линии разработки (trunk). Специфичные команды требуются только для действий, в которых задействовано более одной ветви. К таким командам относятся (помимо команды создания ветви svn copy):

  • svn switch — переключение имеющейся рабочей копии на другую ветвь. В результате переключения служебные данные рабочей копии изменяются так, как будто эта рабочая копия получена операцией svn checkout из той ветви, на которую она переключена. При этом объём сетевого трафика меньше, чем при svn checkout, так как передаётся только разница между данными в рабочей копии и целевой ветвью;
  • svn merge — копирование набора изменений между ветвями — используется для слияния.

Как правило, полный цикл работы с ветвями включает следующие этапы:

  • создание ветви (svn copy);
  • переключение имеющейся рабочей копии на ветвь (svn switch) или создание новой рабочей копии путём закачки (svn checkout);
  • изменение файлов и каталогов в рабочей копии, фиксация этих изменений (svn commit);
  • копирование в ветвь свежих изменений из родительской ветви, сделанных после ветвления (svn merge, svn commit);
  • копирование изменений из ветви в родительскую ветвь (svn merge, svn commit);
  • удаление ветви (svn delete), если её жизненный цикл закончен.

Слияние

Копирование изменений между ветвями

Слияние в Subversion — это применение к ветви набора изменений, сделанных на другой (или той же самой) ветви. Для осуществления слияния необходимо использовать команду svn merge — она применяет набор изменений к рабочей копии; затем нужно зафиксировать внесённые изменения (svn commit).

Терминология, связанная со слиянием, несколько запутана. Термин слияние (англ. Шаблон:Lang-en2) является не совсем точным, поскольку как такового объединения ветвей не происходит. Кроме того, не следует отождествлять слияние и команду svn merge: во-первых, для слияния нужно выполнить (помимо svn merge) разрешение конфликтов и фиксацию, во-вторых, применение svn merge не ограничивается слиянием.

Другие применения команды svn merge

Команду svn merge можно использовать не только для слияния. Фактически команда производит внесение в рабочую копию изменений, равных разнице между двумя каталогами или файлами в хранилище, поэтому svn merge является универсальным средством для переноса изменений. Можно привести такие примеры использования команды svn merge:

  • откат уже зафиксированных изменений, в том числе целого диапазона ревизий;
  • удобный просмотр (в виде изменений в рабочей копии) разницы между двумя состояниями репозитория.

Создание хранилища

Для создания хранилища используется команда svnadmin create. Эта операция создаст пустое хранилище в указанном каталоге.

Subversion и CVS

Сравнение

Ниже приведено сравнение параметров систем Subversion и CVS, так как Subversion позиционируется именно как улучшение CVS. Приведено сравнение только по тем параметрам, по которым эти системы различаются. В целом Subversion превосходит CVS по всем параметрам, кроме поддержки меток в общепринятом смысле (то есть меток, адресующих объекты файловой системы).

Параметр Subversion CVS
Возможности
Каталоги Отслеживает версии не только файлов, но и каталогов. Версии каталогов не отслеживаются, то есть структура каталогов одна и та же (та, которая существует в хранилище на данный момент) для всех ревизий и всех веток. Если изменить структуру каталогов, то при извлечении старых состояний получаем правильные (старые) ревизии файлов, но в неправильной (существующей на момент извлечения) структуре каталогов.
Транзакции Атомарность многофайловых фиксаций. Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной.
Наборы изменений Наборы изменений (англ. Шаблон:Lang-en2) поддерживаются. Наборы изменений не поддерживаются.
Модификации имён файлов Поддерживает копирование, перемещение и переименование файлов и каталогов без потери истории изменений. При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри каталога при модификации его имени<ref>В CVS каталог можно переместить прямо в хранилище средствами файловой системы, при этом файлы в нём не потеряют историю. Однако эта модификация подействует на все ревизии и ветви файлов в этого каталога (поскольку в CVS каталоги вообще не имеют версионной информации).</ref>.
Свойства (properties) С каждым файлом и каталогом может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями. Свойства не поддерживаются.
Блокировки Поддерживается необязательная блокировка файлов (начиная с версии 1.2). Блокировки не поддерживаются, но есть похожий механизм, называемый слежение.
Ветви Ветви (branch, см. словарь) реализованы в пространстве путей. Это значит, что для создания ветви производится копирование каталога (копия и будет ветвью). Создание таких копий — быстрая и не ресурсоёмкая операция, потому что данные не дублируются, вместо этого фиксируется новая версия, отличающаяся от предыдущей лишь расположением файлов. Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: путём в файловой системе, ревизией (или другим способом указания ревизии, например, временем), именем ветви.
Метки Нет меток (tag, см. словарь) как таковых. Вместо них используется иерархия каталогов — для метки создаётся отдельный каталог (как и для ветви). Метка — это ветвь, в которой по договорённости больше не делают изменений. Метка является копией помеченного состояния файлов и каталогов. Метки поддерживаются. Метка адресует помеченное состояние файлов.
Эффективность
Клиент-серверный обмен При любых обновлениях версий между клиентом и сервером передаются только различия между файлами, что может существенно уменьшить сетевой трафик. С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью.
Двоичные файлы Одинаково эффективно работает как с текстовыми, так и с двоичными файлами. Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью.
Создание ветвей и меток Требуется небольшое фиксированное количество времени и дискового пространства. Затраты времени велики (зависят от количества задействованных файлов). Имена ветвей и меток хранятся избыточно (во всех задействованных файлах).
Накладные расходы в рабочей копии В служебных каталогах рабочей копии хранится чистая копия. Поэтому операции просмотра и отката локальных изменений выполняются быстро (без обращения к хранилищу), однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных. Чистая копия не хранится, размер рабочей копии примерно равен размеру данных. Вследствие этого операции просмотра и отката локальных изменений требуют доступа к хранилищу и выполняются медленно.
Расход памяти на сервере Меньше<ref>Шаблон:Cite web</ref>. Больше.

Внутренняя структура

Уровни

Subversion спроектирован как набор библиотек, разделённых на несколько уровней. Каждый из них выполняет конкретную задачу и позволяет разработчикам создавать свои собственные инструменты, в зависимости от сложности и задачи.

Fs
Самый низкий уровень; реализует версионированную файловую систему, которая и хранит данные.
Repos
Уровень хранилища, реализованного на файловой системе. На этом уровне реализовано множество вспомогательных функций, а также поддерживается запуск обработчиков (англ. Шаблон:Lang-en2), то есть скриптов, которые запускаются при наступлении некоторого события. Вместе уровни Fs и Repos составляют интерфейс файловой системы.
mod_dav_svn
Обеспечивает WebDAV/Delta-V-доступ через Apache 2.
Ra
Реализует доступ к хранилищу (и локальный, и удалённый). Начиная с этого уровня на хранилище можно ссылаться по URL, то есть
  • file:///path/ для локального доступа,
  • http://host/path/ или https://host/path/ для доступа через WebDAV, или
  • svn://host/path/ или svn+ssh://host/path/ для доступа через протокол SVN.
Client, Wc
Самый высокий уровень. Абстрагирует доступ к хранилищу и обеспечивает выполнение типичных задач клиента, таких как аутентификация пользователя или сравнение версий. Client использует библиотеку Wc для управления локальной рабочей копией.

Конфигурация клиента

Стандартная клиентская утилита Subversion — SVN, конфигурируется переменными окружения и INI-файлами, создаваемыми в домашнем каталоге пользователя в подкаталоге .subversion (расположение конфигурации в Windows-системах, в файлах или реестре, зависит от системных настроек). В конфигурации SVN также кеширует SSL-сертификаты, логины, пароли и т. п. (если это не запрещено в конфигурации) для доступа к серверам Subversion.

Содержимое каталога .subversion:

  • файл servers — содержит информацию о способах сетевого подключения к удалённому репозиторию;
  • файл config — содержит прочую конфигурационную информацию<ref>Шаблон:Cite web</ref>
  • каталог auth — содержит кеш серверов, сертификатов, логинов и паролей
  • файл README.txt — документация по конфигурированию SVN

Недостатки

Проблемы при переименовании файлов

Subversion не всегда может правильно обработать операции переименования файлов, если одновременно с переименованием изменяется и содержимое файла. Проблемы могут также возникнуть, если файл, переименованный в локальной копии, кто-то другой изменил в хранилище. Часть этих проблем исправлена в версии 1.5, однако это решение пока не полное.<ref>Шаблон:Cite web</ref>

Слабая поддержка слияния ветвей

Также слабым местом Subversion считают операции слияния веток. До версии 1.5 все такие операции пользователям приходилось отслеживать вручную, с помощью подробных записей в журнале изменений. Начиная с версии 1.5 появилась базовая поддержка автоматического отслеживания слияний, которую разработчики планируют улучшить в последующих релизах<ref>Шаблон:Cite web</ref>. В настоящее время Subversion достаточно хорошо поддерживает типовые сценарии слияния; в более сложных случаях возможны проблемы. Рекомендуется<ref>Subversion merge reintegrate Шаблон:WaybackШаблон:Ref</ref> организовать рабочий процесс так, чтобы избежать проблемных сценариев. Слияние переименованных файлов и каталогов не поддерживается.

Невозможность удаления данных из хранилища

Информация, однажды помещённая в хранилище Subversion, остаётся там навсегда: файл можно удалить в текущей ревизии, но всегда есть возможность получить из хранилища одну из предыдущих ревизий, в которых файл существовал. Хотя сохранность прошлых ревизий и является, собственно, целью использования систем управления версиями, иногда бывает необходимо полностью удалить из хранилища информацию, попавшую туда по ошибке. В Subversion не предусмотрено для этого никакого штатного способа<ref>Шаблон:Cite web</ref>; единственная возможность заключается в создании дампа хранилища, его обработке штатной утилитой svndumpfilter и последующем восстановлении хранилища из дампа. Существуют также сторонние программы для автоматизации этого процесса, но, в любом случае, для выполнения этой операции требуется временное прекращение доступа к хранилищу и вмешательство администратора с привилегиями, достаточно высокими для того, чтобы полностью стереть старое хранилище и заменить его новым.

Дополнительное программное обеспечение

  • Клиенты:
  • Плагины:
  • Веб-интерфейсы:
    • Trac — инструмент, основанный на технологии Wiki,
    • Redmine — дополнительно отслеживает ошибки,
    • USVN — утилита для создания и управления доступом к репозиториям, специализирована под SVN,
    • ViewVC,
    • WebSVN,
    • SVNManager — PHP-утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами),
    • Submin — утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории,
    • cSvn — кросс-платформенный клиент Subversion на C.
  • Сравнительная таблица: веб-интерфейсы:

Наименование

Описание

Язык

БД

Лицензия

Сайт

Обновление

Версия

Trac

инструмент, основанный на технологии Wiki

Python

SQLite, PostgreSQL, MySQL и MariaDB

Модифицированная лицензия BSD

trac.edgewall.org Шаблон:Wayback

21.06.2017

1.2.2

Redmine

дополнительно отслеживает ошибки

Ruby

MySQL, PostgreSQL, SQLite, Oracle.

GNU General Public License

redmine.org Шаблон:Wayback

09.12.2018

4.0.0

USVN

утилита для создания и управления доступом к репозиториям, специализирована под SVN

PHP

MySQL, SQLlite

CeCill (GPL совместимая лицензия).

www.usvn.info Шаблон:Wayback

13.01.2012

1.0.6

ViewVC

без управления пользователями, не требует поддержки DAV web-сервером.

Python

MySQL

Two-clause Berkeley-style

www.viewvc.org Шаблон:Wayback

02.12.2010

1.1.8

WebSVN

интерфейс просмотра к SVN

PHP

XML

GNU GPL

websvn.tigris.org Шаблон:Wayback

12.10.2010

2.3.2

SVNManager

утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами)

PHP

MySQL or SQLite

svnmanager.sourceforge.net Шаблон:Wayback

28.01.2012

1.09

Submin (MIT)

утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории

Python

MIT/X Шаблон:Wayback

24.12.2012

2.1

cSvn

web-интерфейс просмотра Subversion-репозиториев

C

RADIX-1.0

csvn.radix.pro Шаблон:Wayback

17.11.2020

0.1.3

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Навигация

Шаблон:Системы управления версиями Шаблон:URI scheme Шаблон:Хорошая статья