Loading AI tools
свободная централизованная система управления версиями Из Википедии, свободной энциклопедии
Subversion[7] (также известная как «SVN»[8]) — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet[англ.]. С 2010 года Subversion является одним из проектов Apache Software Foundation и официально называется Apache Subversion (зарегистрированный товарный знак[9]).
В этой статье может быть слишком много ссылок на другие статьи, и, возможно, их количество нужно сократить. |
Subversion | |||
---|---|---|---|
Тип | централизованная система управления версиями[вд], проект Фонда Apache[вд] и открытое программное обеспечение | ||
Автор | CollabNet[вд] | ||
Разработчик | Apache Software Foundation | ||
Написана на | Си[1][2], Python[1], C++[1], Java[1], Ruby[1] и Perl[1] | ||
Операционные системы | GNU/Linux[3], Windows[3], macOS[3] и BSD[вд][3] | ||
Первый выпуск | 20 октября 2000[4] | ||
Последняя версия | 1.14.3 (28 декабря 2023 ) | ||
Тестовая версия | |||
Репозиторий | svn.apache.org/repos/asf… | ||
| |||
| |||
Лицензия | Apache License 2.0[6] | ||
Сайт | subversion.apache.org (англ.) | ||
Медиафайлы на Викискладе |
Цель проекта в начале разработки — заменить[10][11] распространённую на тот момент систему Concurrent Versions System (CVS), которая на сегодняшний день считается морально устаревшей[12][13][14]. Subversion обладает всеми основными функциями CVS и избавлена от ряда недостатков последней.
Subversion всё ещё используется некоторыми сообществами разработчиков открытого программного обеспечения (в том числе сообществами, ранее использовавшими CVS), но почти все крупные проекты перешли на DVCS. В числе последних пользователей Subversion среди открытых проектов остаётся FreeBSD, но и они анонсировали переход на Git[15]. Довольно долго использовали 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)».[16]
По данным статистики использования пакетов Linux-дистрибутивов Debian[17] и Ubuntu[18], количество активных пользователей Subversion достигло максимума примерно в 2010 году, и начало снижаться с 2016 года. Тем не менее, количество проектов, использующих Subversion всё ещё больше, чем использующих CVS, Mercurial и Bazaar (по состоянию на август 2019 года).
В качестве официальной документации позиционируется[19] книга издательства O’Reilly Media, выложенная в свободный доступ[20] и дописываемая авторами по мере выхода новых версий SVN. Там же публикуются её переводы на ряд языков, в том числе русский, но при том, что англоязычные версии книги сейчас описывают версии 1.8 и 1.7, на русском языке имеются лишь книги, описывающие версии до 1.4 включительно[21].
Разработка Subversion была начата в 2000 году по инициативе и при финансовой поддержке CollabNet. Инициаторы проекта хотели создать свободную систему управления версиями, в основном похожую на CVS, но лишённую её ошибок и неудобств. В то время не существовало лучших программ этого класса со свободной лицензией, CVS была стандартом де-факто среди разработчиков свободного программного обеспечения. Выбрав её за основу, разработчики Subversion надеялись упростить разработку за счёт использования уже проверенных концепций и в то же время облегчить переход на новую систему многочисленным пользователям CVS.[22]
Основные события истории развития Subversion.
svn:externals
, обнаружение «конфликтов деревьев» (англ. tree conflict), улучшение эффективности хранения данных в репозитории и другие внесённые изменения..svn
в корне рабочей копии; ускорена работа по HTTP; добавлена утилита svnrdump
; новая команда svn patch
.Subversion — централизованная система (в отличие от распределённых систем, таких как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере.
Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель копирование — изменение — слияние. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель блокирование — изменение — разблокирование.
При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.
При использовании доступа с помощью WebDAV также поддерживается прозрачное управление версиями — если любой клиент WebDAV открывает для записи и затем сохраняет файл, хранящийся на сетевом ресурсе, то автоматически создаётся новая версия.
Subversion предлагает два варианта организации репозиториев[37]. Репозитории первого типа используют для хранения базы данных на основе Berkeley DB, репозитории второго типа — обычные файлы специального формата (доступ к данным организуется с помощью собственных библиотек, без использования сторонних баз данных). Разработчики Subversion часто называют хранилище «файловой системой», поэтому второй тип получил название FSFS, то есть (версионированная) файловая система (англ. File System) поверх (обычной) файловой системы.
Оба типа репозиториев обеспечивают достаточную надёжность при правильной организации[38] (Berkeley DB использует блокировки файлов, поэтому её нельзя использовать на некоторых сетевых файловых системах, не поддерживающих блокировок), каждая из них обладает своими преимуществами и недостатками. Считается, что FSFS легче правильно настроить, она требует меньшего внимания от администратора. Кроме того, до релиза 1.4 хранилища, использующие Berkeley DB, могли при определённых условиях оказаться в так называемом заклиненном (англ. wedged) состоянии; требовалось вмешательство администратора для восстановления его работоспособности.
Начиная с релиза 1.2 для новых хранилищ по умолчанию используется FSFS. При выпуске релиза 1.8 использование Berkeley DB было объявлено нерекомендованным[34]. Новые возможности, которые будут добавлены в следующих релизах, могут не работать на серверах, использующих Berkeley DB. В дальнейшем поддержка Berkeley DB может быть прекращена.
Subversion предоставляет следующие способы доступа к репозиторию:
mod_dav_svn
для веб-сервера Apache 2;Все эти способы могут быть использованы для работы с репозиториями обоих типов (FSFS и Berkeley DB). Для доступа к одному и тому же репозиторию могут одновременно использоваться разные способы.
С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему. Объекты в хранилище (файлы и каталоги) идентифицируются двумя «координатами»: именем и номером ревизии. Другими словами, хранилище представляет собой массив мгновенных снимков (ревизий) дерева файлов и каталогов, индексируемый номером ревизии. Каждый такой снимок — обычная (одномерная) файловая система.
При необходимости указания на конкретную ревизию объекта используется запись вида: имя@ревизия
, например, /main.c@29
— файл /main.c в ревизии 29. Такое указание ревизии, используемое для уточнения имени, называется стержневая ревизия (англ. peg revision).
На рис. 1 показано графическое представление файловой системы: вертикальная ось соответствует множеству имён, горизонтальная — множеству ревизий.
Имя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах: существует только один корневой каталог, элементы пути разделяются косой чертой («/»). Объектами файловой системы являются файлы и каталоги (а также символические ссылки, которые эмулируются из обычных файлов путём установки атрибута svn:special
).
Номер ревизии в Subversion — это натуральное число (или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть N-я ревизия — это состояние хранилища после N-й фиксации.
В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние четырёх файлов и двух каталогов, существовавших в хранилище на тот момент.
Номер ревизии является аналогом времени в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а бо́льшие — поздним.
HEAD
(головная ревизия); это удобно, поскольку номер головной ревизии увеличивается при каждой фиксации изменений.Номер ревизии можно рассматривать как некую временну́ю отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана (свойство svn:date
). Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён.
Номер ревизии используется в двух различных контекстах:
Ревизия называется оперативной, если она указывает ревизию или диапазон ревизий, к которому должна быть применена операция, например:
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@ревизия
»). Название происходит от английского слова peg, которое можно перевести как «стержень» или «колышек». Стержневая ревизия отмечает ту цепочку состояний, которой принадлежит указанная пара 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 могут быть произведены перечисленные ниже операции[39] (см. рис. 1). В скобках указано краткое именование операции в обозначениях команды svn status
.
/main.c
был добавлен в ревизии 27./main.c
был модифицирован в ревизии 28./main.c
был удалён в ревизии 30.имя_источника@ревизия_источника
копируется в имя_копии@HEAD
. Скопированный объект наследует от источника историю ревизий до момента копирования (наследование истории показано на рисунке пунктирными связями). Примеры на рисунке:/tags/R1
был скопирован с каталога /trunk@27
;/main.c
был скопирован с /main.c@29
, то есть с более ранней ревизии самого себя, таким образом, произведено восстановление ранее удалённого (в ревизии 30) файла с сохранением истории ревизий./file.txt
был заменён: старый файл /file.txt
удалён, а новый файл с тем же именем скопирован с файла /bar.txt@29
.Рабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию (скрытые каталоги с именем .svn
). Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя. Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является каталог. Содержимое каталога можно извлечь не полностью: например, можно исключить отдельные файлы или подкаталоги. Однако извлечь из хранилища отдельный файл как рабочую копию невозможно.
Любой подкаталог рабочей копии Subversion 1.6 и более ранних версий также является полноценной рабочей копией, поскольку в каждом каталоге хранятся его служебные данные (каталоги .svn
). Начиная с версии 1.7 в каждой рабочей копии присутствует только один каталог .svn
в корне её каталога.
Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её. Поэтому, имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика.
В служебных каталогах рабочей копии, помимо прочего, хранится так называемая чистая копия (англ. pristine copy) — файлы рабочей копии в неизменённом виде, как они были извлечены из хранилища (для svn это ревизия с именем BASE). Наличие чистой копии позволяет быстро и без обращения к хранилищу выполнять операции просмотра и отката локальных изменений. Однако размер рабочей копии на диске примерно в два раза больше (данные + чистая копия данных), чем размер самих данных. Такой подход обусловлен тем, что дисковые ресурсы дешевле и доступнее, чем ресурсы сети передачи данных.
Как правило, создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений, поскольку зафиксировать в хранилище можно только изменения, сделанные в рабочей копии. Исключением являются операции, которые могут быть выполнены прямо в хранилище без создания рабочей копии.
Работа с хранилищем в Subversion организована в форме транзакций со свойствами атомарности и изоляции из набора свойств ACID. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.
Данные свойства не гарантируются для рабочей копии 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
, относящиеся только к этому проекту. Описанные структуры каталогов хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае.[40][41]
Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий (путём импорта командой svnadmin load
с параметром --parent-dir
).
Subversion использует «файловую» модель (такую же, как и в Perforce[42]) для реализации ветвей и меток, то есть ветвь является обычным каталогом (можно также сделать ветвь из одного файла, а не каталога). Новая ветвь создаётся командой svn copy
. Ветвь может быть создана в любом каталоге хранилища, однако имеет смысл придерживаться описанных выше соглашений о том, где создавать новые ветви. Более подробная информация о ветвях приведена в разделах Ветвление и Слияние.
Создание метки также производится командой svn copy
, то есть технически не отличается от создания ветви. Отличие только в способе использования: предполагается, что никто не будет изменять данные в метке (фиксировать в неё изменения). Например, на рис. 1 метка создана в ревизии 29: каталог /trunk
из ревизии 27 скопирован под именем /tags/R1
. Теперь, если не изменять данные в каталоге /tags/R1
, то он навсегда останется точной копией каталога /trunk@27
, то есть будет меткой.
Концепция меток, используемая в Subversion, отличается от концепции меток в других системах управления версиями. Обычно метка является символическим именем, которое адресует набор файлов и их состояние. В Subversion метка копирует набор файлов и их состояние. Метки-копии в Subversion имеют свои достоинства и недостатки.
Достоинства:
Недостатки:
Одной из важных возможностей Subversion является поддержка свойств, то есть текстовых пар имя = значение, которые могут быть установлены для объектов в хранилище. Свойства используются в двух различных контекстах: для объектов файловой системы и для ревизий.
Каждому файлу или каталогу в хранилище может быть присвоен набор свойств. Изменения свойств сохраняются в истории так же, как и изменения в файловой системе. Пользователи могут устанавливать свойства с любыми именами; существует также предопределённый набор служебных свойств, которые используются клиентской программой Subversion (имена служебных свойств имеют префикс "svn: ").
svn:executable
svn:mime-type
svn:keywords
$keyword$
. Используется для того, чтобы автоматически обновлять в файле значения, меняющиеся от версии к версии (например, номер ревизии).svn:eol-style
svn:needs-lock
svn:special
svn:special
. Когда этот файл извлекается в UNIX-подобной системе, клиентская программа Subversion преобразует его обратно в ссылку.svn:mergeinfo
svn:mergeinfo
вручную — это может нарушить механизм отслеживания слияний.svn:ignore
.cvsignore
в CVS. Как правило, свойство настраивается таким образом, чтобы клиентская программа «не видела» файлы и каталоги, которые автоматически создаются различными программами и не должны быть версионированы (например, объектные файлы, временные файлы и т. п.). Действие этого свойства не распространяется на подкаталоги.svn:externals
svn:mergeinfo
Второй тип объектов, для которых существуют свойства, — это сами ревизии. В этом случае имена свойств также могут быть любыми; некоторые свойства с префиксом "svn: " имеют специальное значение. Отличие свойств ревизий от свойств объектов файловой системы в том, что для первых понятие истории версий не применимо (поскольку конкретное значение свойства приписано одной ревизии). Другими словами, свойства ревизий можно изменить, но старое значение при этом теряется. По умолчанию изменение свойств ревизий запрещено; для разрешения администратор должен создать скрипт (англ. hook) обработки события pre-revprop-change
.
svn:date
svn:author
svn:log
Как правило, свойства ревизий изменяются только администратором хранилища в целях исправления некорректных данных. Например, если пользователь забыл указать текстовое описание при фиксации своих изменений, то администратор может создать это описание путём редактирования свойства svn:log
.
Типичная итерация рабочего цикла с Subversion включает следующие этапы.
svn update
) или её создание (svn checkout
).svn add
), то есть передать под управление версиями;svn mkdir
, svn delete
, svn move
, svn copy
);svn info
, svn status
, svn diff
);svn revert
).svn update
).svn commit
).Ветвление является важным аспектом работы систем управления версиями, поскольку типичные приёмы[44] управления версиями (по крайней мере, при разработке программного обеспечения) включают в себя использование ветвей. Subversion обладает достаточно развитыми возможностями для ветвления и слияния (однако не поддерживает слияние переименованных файлов и каталогов).
На рис. 3 условно показан пример эволюции ветвей в хранилище. Зелёным цветом показана основная линия разработки проекта (англ. mainline, trunk), жёлтым — ветви, синим — метки, пурпурным — ветвь, разработка которой прекращена. Красными стрелками показаны слияния изменений.
Новая ветвь (а также метка) создаётся командой svn copy
, которая создаёт в хранилище копию с наследованием истории ревизий источника (операция A+). Для создания ветвей всегда следует использовать «удалённую» форму команды svn copy
, например:
svn copy http://.../trunk/dir http://.../branches/branch_name -m "Creating a branch of dir"
Полученная копия будет ветвью (или меткой, в зависимости от способа работы с ней). В дальнейшем изменения, сделанные на ветви, могут быть внесены в источник, из которого была создана эта ветвь, такое распространение изменений называется слияние (англ. merge).
Операции копирования в Subversion дешёвые (англ. cheap copy), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом[45], что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогично жёсткой ссылке), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однако слияние — необходимое дополнение к ветвлению — выполняется в 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
).
Терминология, связанная со слиянием, несколько запутана. Термин слияние (англ. merge) является не совсем точным, поскольку как такового объединения ветвей не происходит. Кроме того, не следует отождествлять слияние и команду svn merge
: во-первых, для слияния нужно выполнить (помимо svn merge
) разрешение конфликтов и фиксацию, во-вторых, применение svn merge
не ограничивается слиянием.
Команду svn merge
можно использовать не только для слияния. Фактически команда производит внесение в рабочую копию изменений, равных разнице между двумя каталогами или файлами в хранилище, поэтому svn merge
является универсальным средством для переноса изменений. Можно привести такие примеры использования команды svn merge
:
Для создания хранилища используется команда svnadmin create
. Эта операция создаст пустое хранилище в указанном каталоге.
Ниже приведено сравнение параметров систем Subversion и CVS, так как Subversion позиционируется именно как улучшение CVS. Приведено сравнение только по тем параметрам, по которым эти системы различаются. В целом Subversion превосходит CVS по всем параметрам, кроме поддержки меток в общепринятом смысле (то есть меток, адресующих объекты файловой системы).
Параметр | Subversion | CVS |
---|---|---|
Возможности | ||
Каталоги | Отслеживает версии не только файлов, но и каталогов. | Версии каталогов не отслеживаются, то есть структура каталогов одна и та же (та, которая существует в хранилище на данный момент) для всех ревизий и всех веток. Если изменить структуру каталогов, то при извлечении старых состояний получаем правильные (старые) ревизии файлов, но в неправильной (существующей на момент извлечения) структуре каталогов. |
Транзакции | Атомарность многофайловых фиксаций. | Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной. |
Наборы изменений | Наборы изменений (англ. changeset) поддерживаются. | Наборы изменений не поддерживаются. |
Модификации имён файлов | Поддерживает копирование, перемещение и переименование файлов и каталогов без потери истории изменений. | При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри каталога при модификации его имени[46]. |
Свойства (properties) | С каждым файлом и каталогом может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями. | Свойства не поддерживаются. |
Блокировки | Поддерживается необязательная блокировка файлов (начиная с версии 1.2). | Блокировки не поддерживаются, но есть похожий механизм, называемый слежение. |
Ветви | Ветви (branch, см. словарь) реализованы в пространстве путей. Это значит, что для создания ветви производится копирование каталога (копия и будет ветвью). Создание таких копий — быстрая и не ресурсоёмкая операция, потому что данные не дублируются, вместо этого фиксируется новая версия, отличающаяся от предыдущей лишь расположением файлов. | Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: путём в файловой системе, ревизией (или другим способом указания ревизии, например, временем), именем ветви. |
Метки | Нет меток (tag, см. словарь) как таковых. Вместо них используется иерархия каталогов — для метки создаётся отдельный каталог (как и для ветви). Метка — это ветвь, в которой по договорённости больше не делают изменений. Метка является копией помеченного состояния файлов и каталогов. | Метки поддерживаются. Метка адресует помеченное состояние файлов. |
Эффективность | ||
Клиент-серверный обмен | При любых обновлениях версий между клиентом и сервером передаются только различия между файлами, что может существенно уменьшить сетевой трафик. | С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью. |
Двоичные файлы | Одинаково эффективно работает как с текстовыми, так и с двоичными файлами. | Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью. |
Создание ветвей и меток | Требуется небольшое фиксированное количество времени и дискового пространства. | Затраты времени велики (зависят от количества задействованных файлов). Имена ветвей и меток хранятся избыточно (во всех задействованных файлах). |
Накладные расходы в рабочей копии | В служебных каталогах рабочей копии хранится чистая копия. Поэтому операции просмотра и отката локальных изменений выполняются быстро (без обращения к хранилищу), однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных. | Чистая копия не хранится, размер рабочей копии примерно равен размеру данных. Вследствие этого операции просмотра и отката локальных изменений требуют доступа к хранилищу и выполняются медленно. |
Расход памяти на сервере | Меньше[47]. | Больше. |
Subversion спроектирован как набор библиотек, разделённых на несколько уровней. Каждый из них выполняет конкретную задачу и позволяет разработчикам создавать свои собственные инструменты, в зависимости от сложности и задачи.
file:///path/
для локального доступа,svn+ssh://host/path/
для доступа через протокол SVN.Стандартная клиентская утилита Subversion — SVN, конфигурируется переменными окружения и INI-файлами, создаваемыми в домашнем каталоге пользователя в подкаталоге .subversion
(расположение конфигурации в Windows-системах, в файлах или реестре, зависит от системных настроек). В конфигурации SVN также кеширует SSL-сертификаты, логины, пароли и т. п. (если это не запрещено в конфигурации) для доступа к серверам Subversion.
Содержимое каталога .subversion
:
Subversion не всегда может правильно обработать операции переименования файлов, если одновременно с переименованием изменяется и содержимое файла. Проблемы могут также возникнуть, если файл, переименованный в локальной копии, кто-то другой изменил в хранилище. Часть этих проблем исправлена в версии 1.5, однако это решение пока не полное.[49]
Также слабым местом Subversion считают операции слияния веток. До версии 1.5 все такие операции пользователям приходилось отслеживать вручную, с помощью подробных записей в журнале изменений. Начиная с версии 1.5 появилась базовая поддержка автоматического отслеживания слияний, которую разработчики планируют улучшить в последующих релизах[50]. В настоящее время Subversion достаточно хорошо поддерживает типовые сценарии слияния; в более сложных случаях возможны проблемы. Рекомендуется[51] организовать рабочий процесс так, чтобы избежать проблемных сценариев. Слияние переименованных файлов и каталогов не поддерживается.
Информация, однажды помещённая в хранилище Subversion, остаётся там навсегда: файл можно удалить в текущей ревизии, но всегда есть возможность получить из хранилища одну из предыдущих ревизий, в которых файл существовал. Хотя сохранность прошлых ревизий и является, собственно, целью использования систем управления версиями, иногда бывает необходимо полностью удалить из хранилища информацию, попавшую туда по ошибке. В Subversion не предусмотрено для этого никакого штатного способа[52]; единственная возможность заключается в создании дампа хранилища, его обработке штатной утилитой svndumpfilter и последующем восстановлении хранилища из дампа. Существуют также сторонние программы для автоматизации этого процесса, но, в любом случае, для выполнения этой операции требуется временное прекращение доступа к хранилищу и вмешательство администратора с привилегиями, достаточно высокими для того, чтобы полностью стереть старое хранилище и заменить его новым.
Наименование |
Описание |
Язык |
БД |
Лицензия |
Сайт |
Обновление |
Версия |
инструмент, основанный на технологии Wiki |
Python |
SQLite, PostgreSQL, MySQL и MariaDB |
trac.edgewall.org Архивная копия от 8 апреля 2013 на Wayback Machine |
21.06.2017 |
1.2.2 | ||
дополнительно отслеживает ошибки |
Ruby |
MySQL, PostgreSQL, SQLite, Oracle. |
redmine.org Архивная копия от 27 апреля 2011 на Wayback Machine |
09.12.2018 |
4.0.0 | ||
утилита для создания и управления доступом к репозиториям, специализирована под SVN |
PHP |
MySQL, SQLlite |
CeCill (GPL совместимая лицензия). |
www.usvn.info Архивная копия от 12 мая 2011 на Wayback Machine |
13.01.2012 |
1.0.6 | |
ViewVC |
без управления пользователями, не требует поддержки DAV web-сервером. |
Python |
MySQL |
Two-clause Berkeley-style |
www.viewvc.org Архивная копия от 4 мая 2011 на Wayback Machine |
02.12.2010 |
1.1.8 |
WebSVN |
интерфейс просмотра к SVN |
PHP |
XML |
websvn.tigris.org Архивная копия от 12 июня 2006 на Wayback Machine |
12.10.2010 |
2.3.2 | |
утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами) |
PHP |
MySQL or SQLite |
svnmanager.sourceforge.net Архивная копия от 30 апреля 2011 на Wayback Machine |
28.01.2012 |
1.09 | ||
Submin (MIT) |
утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории |
Python |
MIT/X Архивная копия от 6 июня 2011 на Wayback Machine |
24.12.2012 |
2.1 | ||
cSvn |
web-интерфейс просмотра Subversion-репозиториев |
C |
csvn.radix.pro Архивная копия от 16 марта 2022 на Wayback Machine |
17.11.2020 |
0.1.3 |
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.