В этой статье может быть слишком много ссылок на другие статьи и возможно их количество нужно сократить Пожалуйста оформ
Subversion

В этой статье может быть слишком много ссылок на другие статьи, и, возможно, их количество нужно сократить. |
Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией [англ.]. С 2010 года Subversion является одним из проектов Apache Software Foundation и официально называется Apache Subversion (зарегистрированный товарный знак).
Subversion | |||
---|---|---|---|
![]() | |||
Тип | централизованная система управления версиями[вд], проект Фонда Apache[вд] и открытое программное обеспечение | ||
Автор | CollabNet[вд] | ||
Разработчик | Apache Software Foundation | ||
Написана на | Си, Python, C++, Java, Ruby и Perl | ||
Операционные системы | GNU/Linux, Windows, macOS и BSD[вд] | ||
Первый выпуск | 20 октября 2000 | ||
Последняя версия | 1.14.3 (28 декабря 2023 ) | ||
Тестовая версия |
| ||
Репозиторий | svn.apache.org/repos/asf… | ||
| |||
| |||
Лицензия | Apache License 2.0 | ||
Сайт | subversion.apache.org (англ.) | ||
![]() |
Цель проекта в начале разработки — заменить распространённую на тот момент систему Concurrent Versions System (CVS), которая на сегодняшний день считается морально устаревшей. Subversion обладает всеми основными функциями CVS и избавлена от ряда недостатков последней.
Subversion всё ещё используется некоторыми сообществами разработчиков открытого программного обеспечения (в том числе сообществами, ранее использовавшими CVS), но почти все крупные проекты перешли на DVCS. В числе последних пользователей Subversion среди открытых проектов остаётся FreeBSD, но и они анонсировали переход на Git. Довольно долго использовали Subversion такие известные проекты, как Apache, GCC, FFmpeg, LLVM, Free Pascal. Subversion также используется в закрытых проектах и корпоративной сфере, но насколько широко — оценить непросто. Хостинг Subversion, в том числе для проектов с открытым кодом, также предоставляют популярные хостинг-проекты SourceForge.net, , Google Code и .
В 2007 году аналитическая компания Forrester, сравнивая преимущества и недостатки различных систем, оценила Subversion как «единоличного лидера в категории Standalone Software Configuration Management (SCM) и сильного участника в категории Software Configuration and Change Management (SCCM)».
По данным статистики использования пакетов Linux-дистрибутивов Debian и Ubuntu, количество активных пользователей Subversion достигло максимума примерно в 2010 году, и начало снижаться с 2016 года. Тем не менее, количество проектов, использующих Subversion всё ещё больше, чем использующих CVS, Mercurial и Bazaar (по состоянию на август 2019 года).
В качестве официальной документации позиционируется книга издательства O’Reilly Media, выложенная в свободный доступ и дописываемая авторами по мере выхода новых версий SVN. Там же публикуются её переводы на ряд языков, в том числе русский, но при том, что англоязычные версии книги сейчас описывают версии 1.8 и 1.7, на русском языке имеются лишь книги, описывающие версии до 1.4 включительно.
История
Разработка Subversion была начата в 2000 году по инициативе и при финансовой поддержке CollabNet. Инициаторы проекта хотели создать свободную систему управления версиями, в основном похожую на CVS, но лишённую её ошибок и неудобств. В то время не существовало лучших программ этого класса со свободной лицензией, CVS была стандартом де-факто среди разработчиков свободного программного обеспечения. Выбрав её за основу, разработчики Subversion надеялись упростить разработку за счёт использования уже проверенных концепций и в то же время облегчить переход на новую систему многочисленным пользователям CVS.
Основные события истории развития Subversion.
- 31 августа 2001 года команда разработчиков перешла с CVS на Subversion для управления собственным исходным кодом: Subversion стала «самодостаточной».
- 23 февраля 2004 года вышла версия 1.0.0. К этому времени Subversion уже использовалась примерно на 1400 серверах с открытым доступом.
- 29 сентября 2004 года появился релиз 1.1.0. Среди основных нововведений — новый формат хранилища на основе обычных файлов (FSFS), в дополнение к существовавшему ранее (с использованием Berkeley DB).
- 21 мая 2005 года вышел релиз 1.2.0, в котором добавлена возможность блокировки файлов, что позволило улучшить поддержку клиентов WebDAV/DeltaV, в том числе, реализовать автоматическое создание новых версий при редактировании файлов с помощью таких клиентов. Начиная с этого релиза Subversion по умолчанию использует FSFS для новых хранилищ.
- 30 декабря 2005 года вышел релиз 1.3.0. Основными изменениями являются возможность устанавливать права доступа к каталогам при использовании svnserve, дополнительные возможности команд, а также множество улучшений для разработчиков.
- 10 сентября 2006 года вышел релиз 1.4.0. Он поддерживает работу с BerkeleyDB 4.4 и может использовать её функции самовосстановления. Ранее при сбоях Subversion хранилище, использующее BerkeleyDB, могло остаться в «заклиненном» состоянии и требовалось вмешательство администратора для восстановления работы системы (при использовании FSFS этой проблемы нет).
- 19 июня 2008 года вышел релиз 1.5.0, в нём сделано множество улучшений, самым значительным из которых является базовая поддержка отслеживания слияний (англ. merge tracking). Эта возможность делает процесс слияния пакетов в Subversion более простым и надёжным.
- 20 марта 2009 года вышел релиз 1.6.0. Улучшения поддержки
svn:externals
, обнаружение «конфликтов деревьев» (англ. tree conflict), улучшение эффективности хранения данных в репозитории и другие внесённые изменения. - В феврале 2010 года проект Subversion был официально переведён под управление Apache Software Foundation (ASF). Президент Subversion Corporation и директор Open Source в WANdisco выступил с видеообращением, в котором с энтузиазмом пообещал всем, что переход Subversion к ASF будет лишь способствовать более активному развитию проекта.
- 11 октября 2011 года состоялся релиз 1.7. Основные улучшения: теперь только одна папка
.svn
в корне рабочей копии; ускорена работа по HTTP; добавлена утилитаsvnrdump
; новая командаsvn patch
. - 18 июня 2013 года вышел релиз 1.8.0. Apache Subversion 1.8 является расширением всех предыдущих выпусков Subversion.
Общие сведения
Возможности
- Хранение полной истории изменений отслеживаемых объектов (файлов, каталогов, символьных ссылок) в централизованном хранилище (репозитории), в том числе при изменении атрибутов («метаданных»), перемещении, переименовании и удалении
- Копирование объектов с разветвлением истории — при копировании в хранилище появляются два отдельных объекта с общей историей
- Поддержка переноса изменений между копиями объектов, в том числе полного слияния копий (в рабочей копии; без объединения истории)
- Эмуляцияветвления:
- создание ветвей с помощью копирования каталогов и последующая независимая работа с ними
- слияние ветвей с автоматическим определением и переносом изменений
- Эмуляцияметок (копированием каталогов)
- История изменений и копии объектов (в том числе ветви и метки) хранятся в виде связанных разностных копий — «дешёвых» (не требующих больших временны́х и дисковых ресурсов) при создании и хранении
- Поддержка конкурентной (в том числе одновременной, с изоляцией транзакций) многопользовательской работы с хранилищем и, в большинстве случаев, автоматическим слиянием изменений различных разработчиков (в рабочей копии)
- Фиксации изменений в хранилище (в том числе многообъектные) организуются в виде атомарных транзакций
- Сетевой обмен между сервером и клиентом предусматривает передачу только различий между рабочей копией и хранилищем
- Обеспечивается одинаково эффективная работа как с текстовыми, так и с двоичными файлами
- Различные варианты доступа к хранилищу, в том числе:
- непосредственный доступ на локальной файловой системе;
- по собственному сетевому протоколу;
- через веб-сервер по протоколу WebDAV/.
- Вывод клиента командной строки одинаково удобен и для чтения, и для разбора программами
- Возможность зеркалирования хранилища
- Два возможных внутренних формата хранилища (англ. repository): база данных или набор обычных файлов
- Интернационализированные сообщения программы (используются настройки локали)
- Библиотеки для языков PHP, Python, Perl, Java позволяют встроить функциональность клиента Subversion в программы, написанные на этих языках
- Многоуровневая архитектура библиотек, изначально рассчитанная на клиент-серверную модель
Модель работы
Subversion — централизованная система (в отличие от распределённых систем, таких как Git или Mercurial), то есть данные хранятся в едином хранилище. Хранилище может располагаться на локальном диске или на сетевом сервере.
Работа в Subversion мало отличается от работы в других централизованных системах управления версиями. Клиенты копируют файлы из хранилища, создавая локальные рабочие копии, затем вносят изменения в рабочие копии и фиксируют эти изменения в хранилище. Несколько клиентов могут одновременно обращаться к хранилищу. Для совместной работы над файлами в Subversion преимущественно используется модель копирование — изменение — слияние. Кроме того, для файлов, не допускающих слияние (различные бинарные форматы файлов), можно использовать модель блокирование — изменение — разблокирование.
При сохранении новых версий используется дельта-компрессия: система находит отличия новой версии от предыдущей и записывает только их, избегая дублирования данных.
При использовании доступа с помощью WebDAV также поддерживается прозрачное управление версиями — если любой клиент WebDAV открывает для записи и затем сохраняет файл, хранящийся на сетевом ресурсе, то автоматически создаётся новая версия.
Типы репозиториев
Subversion предлагает два варианта организации репозиториев. Репозитории первого типа используют для хранения базы данных на основе Berkeley DB, репозитории второго типа — обычные файлы специального формата (доступ к данным организуется с помощью собственных библиотек, без использования сторонних баз данных). Разработчики Subversion часто называют хранилище «файловой системой», поэтому второй тип получил название FSFS, то есть (версионированная) файловая система (англ. File System) поверх (обычной) файловой системы.
Оба типа репозиториев обеспечивают достаточную надёжность при правильной организации (Berkeley DB использует блокировки файлов, поэтому её нельзя использовать на некоторых сетевых файловых системах, не поддерживающих блокировок), каждая из них обладает своими преимуществами и недостатками. Считается, что FSFS легче правильно настроить, она требует меньшего внимания от администратора. Кроме того, до релиза 1.4 хранилища, использующие Berkeley DB, могли при определённых условиях оказаться в так называемом заклиненном (англ. wedged) состоянии; требовалось вмешательство администратора для восстановления его работоспособности.
Начиная с релиза 1.2 для новых хранилищ по умолчанию используется FSFS. При выпуске релиза 1.8 использование Berkeley DB было объявлено нерекомендованным. Новые возможности, которые будут добавлены в следующих релизах, могут не работать на серверах, использующих Berkeley DB. В дальнейшем поддержка Berkeley DB может быть прекращена.
Доступ к репозиторию
Subversion предоставляет следующие способы доступа к репозиторию:
- прямой доступ к репозиторию на диске (на локальной или сетевой файловой системе);
- удалённый доступ по протоколу WebDAV/ поверх HTTP (или HTTPS) с использованием модуля
mod_dav_svn
для веб-сервера Apache 2; - удалённый доступ с использованием собственного протокола SVN:
- на выделенном сетевом соединении (по умолчанию на TCP-порту 3690);
- через стандартный ввод-вывод (в том числе через средства удалённого CLI, например, SSH).
Все эти способы могут быть использованы для работы с репозиториями обоих типов (FSFS и Berkeley DB). Для доступа к одному и тому же репозиторию могут одновременно использоваться разные способы.
Основные концепции
Файловая система

С точки зрения пользователя хранилище Subversion представляет собой «двумерную» файловую систему. Объекты в хранилище (файлы и каталоги) идентифицируются двумя «координатами»: именем и номером ревизии. Другими словами, хранилище представляет собой массив мгновенных снимков (ревизий) дерева файлов и каталогов, индексируемый номером ревизии. Каждый такой снимок — обычная (одномерная) файловая система.
При необходимости указания на конкретную ревизию объекта используется запись вида: имя@ревизия
, например, /main.c@29
— файл /main.c в ревизии 29. Такое указание ревизии, используемое для уточнения имени, называется стержневая ревизия (англ. peg revision).
На рис. 1 показано графическое представление файловой системы: вертикальная ось соответствует множеству имён, горизонтальная — множеству ревизий.
Имена файлов
Имя объекта файловой системы в Subversion образуется по тем же правилам, что и в UNIX-подобных операционных системах: существует только один корневой каталог, элементы пути разделяются косой чертой («/»). Объектами файловой системы являются файлы и каталоги (а также символические ссылки, которые эмулируются из обычных файлов путём установки атрибута svn:special
).
Номера ревизий
Номер ревизии в Subversion — это натуральное число (или 0 для самой первой ревизии), адресующее номер состояния хранилища в процессе изменения содержащихся в нём данных. Каждая успешная фиксация изменений порождает ровно одну новую ревизию в хранилище, то есть N-я ревизия — это состояние хранилища после N-й фиксации.
В Subversion ревизия характеризует состояние не отдельного файла, а всего хранилища в целом. Например, ревизия 32 (обведено пунктиром на рисунке) — это состояние четырёх файлов и двух каталогов, существовавших в хранилище на тот момент.
Номер ревизии является аналогом времени в том смысле, что меньшие номера ревизий соответствуют более ранним состояниям хранилища, а бо́льшие — поздним.
- Минимальный номер ревизии 0 (ноль) соответствует изначальному состоянию хранилища, когда ещё не было зафиксировано ни одной правки. В нулевой ревизии хранилище содержит только пустой корневой каталог.
- Максимальный номер ревизии соответствует самому последнему состоянию хранилища, то есть состоянию после фиксации последней правки. Вместо указания номера последней ревизии можно использовать ключевое слово
HEAD
(головная ревизия); это удобно, поскольку номер головной ревизии увеличивается при каждой фиксации изменений.
Номер ревизии можно рассматривать как некую временну́ю отметку в истории хранилища. Более того, с каждым номером ревизии связано абсолютное значение времени, когда эта ревизия была сделана (свойство svn:date
). Однако указание номера ревизии удобнее, чем указание времени, так как нет путаницы с часовыми поясами, запись номера короче и номер ревизии не может быть изменён.
Оперативная и стержневая ревизии

Номер ревизии используется в двух различных контекстах:
- оперативной ревизии (англ. operative revision);
- стержневой ревизии (англ. peg revision).
Ревизия называется оперативной, если она указывает ревизию или диапазон ревизий, к которому должна быть применена операция, например:
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 могут быть произведены перечисленные ниже операции (см. рис. 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) файла с сохранением истории ревизий.
- в ревизии 29 каталог
- Замена (R+). Имеет место в случае, когда в одной ревизии произведено и удаление объекта (D), и добавление с историей (A+) объекта с тем же самым именем. Хотя имя при операции замены остаётся неизменным, Subversion рассматривает объект до и после замены как два различных объекта с различными историями ревизий (история старого заканчивается в точке замены, история нового наследуется от источника копирования и продолжается далее). Пример на рисунке:
- в ревизии 30 файл
/file.txt
был заменён: старый файл/file.txt
удалён, а новый файл с тем же именем скопирован с файла/bar.txt@29
.
- в ревизии 30 файл
Фиксация изменений
Рабочая копия
Рабочая копия — это созданная клиентской программой Subversion локальная копия части данных из хранилища, содержащая помимо собственно данных некоторую служебную информацию (скрытые каталоги с именем .svn
). Служебная информация необходима для правильного функционирования рабочей копии; что-либо менять в служебных данных нельзя. Минимальной единицей данных, которую можно получить из хранилища как рабочую копию, является каталог. Содержимое каталога можно извлечь не полностью: например, можно исключить отдельные файлы или подкаталоги. Однако извлечь из хранилища отдельный файл как рабочую копию невозможно.
Любой подкаталог рабочей копии Subversion 1.6 и более ранних версий также является полноценной рабочей копией, поскольку в каждом каталоге хранятся его служебные данные (каталоги .svn
). Начиная с версии 1.7 в каждой рабочей копии присутствует только один каталог .svn
в корне её каталога.
Рабочая копия является самодостаточной в том смысле, что Subversion не хранит каких-либо данных, относящихся к рабочей копии, вне её. Поэтому, имея одну рабочую копию, можно сделать ещё несколько копий простым копированием без затрат сетевого трафика.
В служебных каталогах рабочей копии, помимо прочего, хранится так называемая чистая копия (англ. pristine copy) — файлы рабочей копии в неизменённом виде, как они были извлечены из хранилища (для svn это ревизия с именем BASE). Наличие чистой копии позволяет быстро и без обращения к хранилищу выполнять операции просмотра и отката локальных изменений. Однако размер рабочей копии на диске примерно в два раза больше (данные + чистая копия данных), чем размер самих данных. Такой подход обусловлен тем, что дисковые ресурсы дешевле и доступнее, чем ресурсы сети передачи данных.
Как правило, создание рабочей копии является первым и необходимым этапом для фиксации локальных изменений, поскольку зафиксировать в хранилище можно только изменения, сделанные в рабочей копии. Исключением являются операции, которые могут быть выполнены прямо в хранилище без создания рабочей копии.
Транзакции
Работа с хранилищем в Subversion организована в форме транзакций со свойствами атомарности и изоляции из набора свойств ACID. Таким образом система управления версиями гарантирует целостность, непротиворечивость и доступность хранилища в любой момент времени.
- Атомарность фиксаций (англ. atomic commits) — изменения в нескольких файлах или каталогах фиксируются единой транзакцией, порождая при этом одну ревизию. В случае неудачной фиксации, при любом сбое или ошибке, система гарантирует, что хранилище не окажется в частично изменённом состоянии — в хранилище попадут либо все изменения, либо (при неудаче) — ни одного.
- Изоляция гарантирует, что промежуточные состояния хранилища внутри транзакции не видны другим транзакциям и пользователям. Например, если один пользователь фиксирует одной транзакцией изменения в нескольких файлах, то другие пользователи не могут увидеть такого состояния хранилища, в котором часть файлов уже изменена, а часть — не изменена.
Данные свойства не гарантируются для рабочей копии 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
, относящиеся только к этому проекту. Описанные структуры каталогов хранилища являются лишь примерами, на практике хранилище можно организовать таким способом, который оптимально подходит в данном конкретном случае.
Другим способом хранения нескольких проектов является создание нескольких хранилищ. В разных хранилищах следует располагать проекты, которые никак не связаны между собой, поскольку между хранилищами нельзя будет выполнить операции копирования, перемещения и слияния. Несколько хранилищ можно при необходимости объединить в одно с сохранением истории ревизий (путём импорта командой svnadmin load
с параметром --parent-dir
).
Ветви
Subversion использует «файловую» модель (такую же, как и в Perforce) для реализации ветвей и меток, то есть ветвь является обычным каталогом (можно также сделать ветвь из одного файла, а не каталога). Новая ветвь создаётся командой svn copy
. Ветвь может быть создана в любом каталоге хранилища, однако имеет смысл придерживаться описанных выше соглашений о том, где создавать новые ветви. Более подробная информация о ветвях приведена в разделах Ветвление и Слияние.
Метки
Создание метки также производится командой svn copy
, то есть технически не отличается от создания ветви. Отличие только в способе использования: предполагается, что никто не будет изменять данные в метке (фиксировать в неё изменения). Например, на рис. 1 метка создана в ревизии 29: каталог /trunk
из ревизии 27 скопирован под именем /tags/R1
. Теперь, если не изменять данные в каталоге /tags/R1
, то он навсегда останется точной копией каталога /trunk@27
, то есть будет меткой.
Концепция меток, используемая в Subversion, отличается от концепции меток в других системах управления версиями. Обычно метка является символическим именем, которое адресует набор файлов и их состояние. В Subversion метка копирует набор файлов и их состояние. Метки-копии в Subversion имеют свои достоинства и недостатки.
Достоинства:
- метка видна в структуре каталогов, можно сделать удобную древовидную организацию меток.
Недостатки:
- трудно узнать, в какие метки вошёл файл (то же для каталога);
- если права доступа установлены индивидуально для каталогов, то метка эти права не наследует;
- содержимое метки может быть изменено;
- если из метки создать рабочую копию и зафиксировать из этой рабочей копии какие-либо изменения, то это изменит саму метку, а не те данные, которые были помечены. Правильным способом работы «от метки» является создание рабочей копии не из метки, а из того, что является источником этой метки.
Свойства (properties)
Одной из важных возможностей Subversion является поддержка свойств, то есть текстовых пар имя = значение, которые могут быть установлены для объектов в хранилище. Свойства используются в двух различных контекстах: для объектов файловой системы и для ревизий.
Свойства объектов файловой системы
Каждому файлу или каталогу в хранилище может быть присвоен набор свойств. Изменения свойств сохраняются в истории так же, как и изменения в файловой системе. Пользователи могут устанавливать свойства с любыми именами; существует также предопределённый набор служебных свойств, которые используются клиентской программой Subversion (имена служебных свойств имеют префикс "svn: ").
Свойства файлов
svn:executable
- Делает файл исполняемым (для рабочих копий под операционными системами семейства UNIX).
svn:mime-type
- Хранит MIME-тип файла. Влияет на способ работы команд, показывающих разницу файлов, а также объединяющих изменения (merging).
svn:keywords
- Список ключевых слов (англ. keywords), которые будут заменены в файле соответствующими значениями. Чтобы замена произошла, ключевое слово должно присутствовать в файле в виде
$keyword$
. Используется для того, чтобы автоматически обновлять в файле значения, меняющиеся от версии к версии (например, номер ревизии). svn:eol-style
- Определяет правило преобразования символов конца строки (англ. end-of-line, EOL) в текстовом файле. Используется в случаях, когда файл должен иметь конкретный тип символов EOL. Обычно используется «native» — при этом тип символов конца строки соответствует принятому в той операционной системе, в которой происходит создание рабочей копии.
svn:needs-lock
- Означает, что при извлечении из хранилища файл будет доступен только для чтения. Это свойство предназначено для использования совместно с механизмом блокировки. Запрет записи в файл является напоминанием того, что надо получить блокировку на этот файл, прежде чем его редактировать: при получении блокировки клиентская программа Subversion автоматически делает файл доступным для записи (снятие блокировки снова делает файл защищённым от модификаций). Блокировки могут быть использованы и без установки этого свойства. Однако делать это не рекомендуется, так как существует риск того, что другой пользователь может начать редактировать заблокированный файл, и это обнаружится только при фиксации изменений.
svn:special
- Свойство не предназначено для установки или модификации пользователями. В настоящее время используется для хранения символьных ссылок в репозитории. Когда символьная ссылка добавляется в репозиторий, в репозитории создаётся файл с установленным свойством
svn:special
. Когда этот файл извлекается в UNIX-подобной системе, клиентская программа Subversion преобразует его обратно в ссылку. svn:mergeinfo
- Хранит информацию о том, из каких путей было произведено слияние в этот файл. Свойство введено в версии 1.5, оно используется для отслеживания слияний (англ. merge tracking). Представляет собой набор строк вида имя_файла: диапазон_ревизий. Здесь имя_файла — полное (с путём от корня файловой системы репозитория) имя файла или каталога, откуда было произведено слияние указанного диапазона ревизий. Строки модифицируются автоматически при операциях слияния; при последующих слияниях Subversion учитывает ранее вписанные строки, избегая тем самым повторных слияний одних и тех же изменений. Не рекомендуется изменять свойство
svn:mergeinfo
вручную — это может нарушить механизм отслеживания слияний.
Свойства каталогов
svn:ignore
- Список шаблонов имён файлов и каталогов, которые клиентская программа Subversion будет игнорировать в данном каталоге. Это свойство аналогично файлу
.cvsignore
в CVS. Как правило, свойство настраивается таким образом, чтобы клиентская программа «не видела» файлы и каталоги, которые автоматически создаются различными программами и не должны быть версионированы (например, объектные файлы, временные файлы и т. п.). Действие этого свойства не распространяется на подкаталоги. svn:externals
- Позволяет автоматически извлечь в рабочую копию набор каталогов, указав их URL (можно даже из другого хранилища).
svn:mergeinfo
- То же, что и для файлов.
Свойства ревизий
Второй тип объектов, для которых существуют свойства, — это сами ревизии. В этом случае имена свойств также могут быть любыми; некоторые свойства с префиксом "svn: " имеют специальное значение. Отличие свойств ревизий от свойств объектов файловой системы в том, что для первых понятие истории версий не применимо (поскольку конкретное значение свойства приписано одной ревизии). Другими словами, свойства ревизий можно изменить, но старое значение при этом теряется. По умолчанию изменение свойств ревизий запрещено; для разрешения администратор должен создать скрипт (англ. hook) обработки события 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
).
Ветвление
Ветвление является важным аспектом работы систем управления версиями, поскольку типичные приёмы управления версиями (по крайней мере, при разработке программного обеспечения) включают в себя использование ветвей. 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), то есть требуют небольшого фиксированного количества времени и дискового пространства. Хранилище спроектировано таким образом, что при любом копировании происходит не дублирование данных, а создание ссылки на источник (аналогично жёсткой ссылке), однако этот механизм чисто внутренний — с точки зрения пользователя происходит именно создание копии. Благодаря высокой эффективности создания ветвей их можно создавать настолько часто, насколько это необходимо (однако слияние — необходимое дополнение к ветвлению — выполняется в 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
является универсальным средством для переноса изменений. Можно привести такие примеры использования команды svn merge
:
- откат уже зафиксированных изменений, в том числе целого диапазона ревизий;
- удобный просмотр (в виде изменений в рабочей копии) разницы между двумя состояниями репозитория.
Создание хранилища
Для создания хранилища используется команда svnadmin create
. Эта операция создаст пустое хранилище в указанном каталоге.
Subversion и CVS
Сравнение
Ниже приведено сравнение параметров систем Subversion и CVS, так как Subversion позиционируется именно как улучшение CVS. Приведено сравнение только по тем параметрам, по которым эти системы различаются. В целом Subversion превосходит CVS по всем параметрам, кроме поддержки меток в общепринятом смысле (то есть меток, адресующих объекты файловой системы).
Параметр | Subversion | CVS |
---|---|---|
Возможности | ||
Каталоги | Отслеживает версии не только файлов, но и каталогов. | Версии каталогов не отслеживаются, то есть структура каталогов одна и та же (та, которая существует в хранилище на данный момент) для всех ревизий и всех веток. Если изменить структуру каталогов, то при извлечении старых состояний получаем правильные (старые) ревизии файлов, но в неправильной (существующей на момент извлечения) структуре каталогов. |
Транзакции | Атомарность многофайловых фиксаций. | Атомарность только на уровне однофайловых фиксаций. Фактически фиксация изменений в нескольких файлах разбивается на последовательность фиксаций изменений отдельных файлов. Если такая последовательность фиксаций прервана, то часть файлов остаётся зафиксированной, часть — не зафиксированной. |
Наборы изменений | Наборы изменений (англ. changeset) поддерживаются. | Наборы изменений не поддерживаются. |
Модификации имён файлов | Поддерживает копирование, перемещение и переименование файлов и каталогов без потери истории изменений. | При копировании, перемещении и переименовании файлов файл с новым именем не имеет никакой истории, то есть связь со старым именем и его историей версий полностью теряется. То же самое для файлов внутри каталога при модификации его имени. |
Свойства (properties) | С каждым файлом и каталогом может быть связан произвольный набор свойств, состоящих из названия и значения. Свойства тоже находятся под управлением версиями. | Свойства не поддерживаются. |
Блокировки | Поддерживается необязательная блокировка файлов (начиная с версии 1.2). | Блокировки не поддерживаются, но есть похожий механизм, называемый слежение. |
Ветви | Ветви (branch, см. словарь) реализованы в пространстве путей. Это значит, что для создания ветви производится копирование каталога (копия и будет ветвью). Создание таких копий — быстрая и не ресурсоёмкая операция, потому что данные не дублируются, вместо этого фиксируется новая версия, отличающаяся от предыдущей лишь расположением файлов. | Ветви реализованы в «третьем измерении». Это значит, что файл на ветви адресуется тремя параметрами: путём в файловой системе, ревизией (или другим способом указания ревизии, например, временем), именем ветви. |
Метки | Нет меток (tag, см. словарь) как таковых. Вместо них используется иерархия каталогов — для метки создаётся отдельный каталог (как и для ветви). Метка — это ветвь, в которой по договорённости больше не делают изменений. Метка является копией помеченного состояния файлов и каталогов. | Метки поддерживаются. Метка адресует помеченное состояние файлов. |
Эффективность | ||
Клиент-серверный обмен | При любых обновлениях версий между клиентом и сервером передаются только различия между файлами, что может существенно уменьшить сетевой трафик. | С сервера к клиенту передаются различия, с клиента на сервер объект передаётся полностью. |
Двоичные файлы | Одинаково эффективно работает как с текстовыми, так и с двоичными файлами. | Работа с двоичными файлами менее эффективна: каждая новая версия сохраняется в хранилище полностью. |
Создание ветвей и меток | Требуется небольшое фиксированное количество времени и дискового пространства. | Затраты времени велики (зависят от количества задействованных файлов). Имена ветвей и меток хранятся избыточно (во всех задействованных файлах). |
Накладные расходы в рабочей копии | В служебных каталогах рабочей копии хранится чистая копия. Поэтому операции просмотра и отката локальных изменений выполняются быстро (без обращения к хранилищу), однако размер рабочей копии на диске примерно в два раза больше, чем размер самих данных. | Чистая копия не хранится, размер рабочей копии примерно равен размеру данных. Вследствие этого операции просмотра и отката локальных изменений требуют доступа к хранилищу и выполняются медленно. |
Расход памяти на сервере | Меньше. | Больше. |
Внутренняя структура
Уровни
Subversion спроектирован как набор библиотек, разделённых на несколько уровней. Каждый из них выполняет конкретную задачу и позволяет разработчикам создавать свои собственные инструменты, в зависимости от сложности и задачи.
- Fs
- Самый низкий уровень; реализует версионированную файловую систему, которая и хранит данные.
- Repos
- Уровень хранилища, реализованного на файловой системе. На этом уровне реализовано множество вспомогательных функций, а также поддерживается запуск обработчиков (англ. hooks), то есть скриптов, которые запускаются при наступлении некоторого события. Вместе уровни Fs и Repos составляют интерфейс файловой системы.
- mod_dav_svn
- Обеспечивает WebDAV/-доступ через 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
— содержит прочую конфигурационную информацию - каталог
auth
— содержит кеш серверов, сертификатов, логинов и паролей - файл
README.txt
— документация по конфигурированию SVN
Недостатки
Проблемы при переименовании файлов
Subversion не всегда может правильно обработать операции переименования файлов, если одновременно с переименованием изменяется и содержимое файла. Проблемы могут также возникнуть, если файл, переименованный в локальной копии, кто-то другой изменил в хранилище. Часть этих проблем исправлена в версии 1.5, однако это решение пока не полное.
Слабая поддержка слияния ветвей
Также слабым местом Subversion считают операции слияния веток. До версии 1.5 все такие операции пользователям приходилось отслеживать вручную, с помощью подробных записей в журнале изменений. Начиная с версии 1.5 появилась базовая поддержка автоматического отслеживания слияний, которую разработчики планируют улучшить в последующих релизах. В настоящее время Subversion достаточно хорошо поддерживает типовые сценарии слияния; в более сложных случаях возможны проблемы. Рекомендуется организовать рабочий процесс так, чтобы избежать проблемных сценариев. Слияние переименованных файлов и каталогов не поддерживается.
Невозможность удаления данных из хранилища
Информация, однажды помещённая в хранилище Subversion, остаётся там навсегда: файл можно удалить в текущей ревизии, но всегда есть возможность получить из хранилища одну из предыдущих ревизий, в которых файл существовал. Хотя сохранность прошлых ревизий и является, собственно, целью использования систем управления версиями, иногда бывает необходимо полностью удалить из хранилища информацию, попавшую туда по ошибке. В Subversion не предусмотрено для этого никакого штатного способа; единственная возможность заключается в создании дампа хранилища, его обработке штатной утилитой svndumpfilter и последующем восстановлении хранилища из дампа. Существуют также сторонние программы для автоматизации этого процесса, но, в любом случае, для выполнения этой операции требуется временное прекращение доступа к хранилищу и вмешательство администратора с привилегиями, достаточно высокими для того, чтобы полностью стереть старое хранилище и заменить его новым.
Дополнительное программное обеспечение
- Клиенты:
- RapidSVN — кросс-платформенный клиент Subversion на C++;
- — кросс-платформенный клиент Subversion на Java;
- TortoiseSVN — клиент Subversion, реализованный как расширение для проводника Windows;
- — клиент Subversion, реализованный как расширение для файлового менеджера в Linux (ранее назывался NautilusSVN);
- - графический клиент Subversion в составе набора приложений KDE Software Compilation;
- — расширение для Microsoft Visual Studio.
- Плагины:
- AnkhSVN — плагин для Microsoft Visual Studio,
- — плагин для Microsoft Visual Studio,
- — плагин для Microsoft SCC,
- — плагин для Eclipse,
- — плагин для Eclipse,
- — плагин для Microsoft Office.
- Веб-интерфейсы:
- Trac — инструмент, основанный на технологии Wiki,
- Redmine — дополнительно отслеживает ошибки,
- USVN — утилита для создания и управления доступом к репозиториям, специализирована под SVN,
- ,
- ,
- SVNManager — PHP-утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами),
- — утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории,
- — кросс-платформенный клиент Subversion на C.
- Сравнительная таблица: веб-интерфейсы:
Наименование | Описание | Язык | БД | Лицензия | Сайт | Обновление | Версия |
Trac | инструмент, основанный на технологии Wiki | Python | SQLite, PostgreSQL, MySQL и MariaDB | Модифицированная лицензия BSD | trac.edgewall.org Архивная копия от 8 апреля 2013 на Wayback Machine | 21.06.2017 | 1.2.2 |
Redmine | дополнительно отслеживает ошибки | Ruby | MySQL, PostgreSQL, SQLite, Oracle. | GNU General Public License | redmine.org Архивная копия от 27 апреля 2011 на Wayback Machine | 09.12.2018 | 4.0.0 |
USVN | утилита для создания и управления доступом к репозиториям, специализирована под SVN | PHP | MySQL, SQLlite | CeCill (GPL совместимая лицензия). | www.usvn.info Архивная копия от 12 мая 2011 на Wayback Machine | 13.01.2012 | 1.0.6 |
| без управления пользователями, не требует поддержки DAV web-сервером. | Python | MySQL | Two-clause Berkeley-style | www.viewvc.org Архивная копия от 4 мая 2011 на Wayback Machine | 02.12.2010 | 1.1.8 |
| интерфейс просмотра к SVN | PHP | XML | GNU GPL | websvn.tigris.org Архивная копия от 12 июня 2006 на Wayback Machine | 12.10.2010 | 2.3.2 |
SVNManager | утилита для управления репозиториями (создание, удаление, загрузка и выгрузка; управление пользователями и группами) | PHP | MySQL or SQLite | svnmanager.sourceforge.net Архивная копия от 30 апреля 2011 на Wayback Machine | 28.01.2012 | 1.09 | |
(MIT) | утилита для управления репозиториями и пользователями, включая управление контролем доступа к отдельным каталогам в репозитории | Python | MIT/X Архивная копия от 6 июня 2011 на Wayback Machine | 24.12.2012 | 2.1 | ||
| web-интерфейс просмотра Subversion-репозиториев | C | RADIX-1.0 | csvn.radix.pro Архивная копия от 16 марта 2022 на Wayback Machine | 17.11.2020 | 0.1.3 |
Примечания
- https://subversion.apache.org/docs/release-notes/release-history.html
- Sahlberg D. Apache Subversion 1.14.5 released (англ.) — 2024.
- The subversion Open Source Project on Open Hub: Languages Page — 2006.
- https://projects.apache.org/json/projects/subversion.json
- Free Software Directory
- http://subversion.tigris.org/license-1.html
- Английское слово subversion можно перевести двояко — как «свержение» (subversion) и как «подверсия» (sub-version)
- По названию программы-клиента для командной строки, входящей в состав пакета
- Apache Trademark Listing . Дата обращения: 10 октября 2015. Архивировано 7 октября 2015 года.
- Subversion Features Архивная копия от 8 апреля 2011 на Wayback Machine (англ.)
- The Risks of Distributed Version Control Архивная копия от 15 июля 2011 на Wayback Machine Бен Коллинз-Сассман (англ.)
- CVS is out, Subversion is in Архивировано 25 марта 2010 года. (англ.) Red Hat magazine, август 2005 г.
- CVS — sourceforge Архивировано 10 июня 2010 года.
- CVS — система управления версиями . Дата обращения: 30 июня 2010. Архивировано 8 июля 2010 года.
- HEADS UP: FreeBSD src repo transitioning to git this weekend (англ.). lists.freebsd.org (17 декабря 2020). Дата обращения: 22 декабря 2020. Архивировано 18 декабря 2020 года.
- The Forrester Wave: Software Change and Configuration Management, Q2 2007 . Forrester Research. Архивировано из оригинала 25 августа 2011 года.
- Popularity contest statistics for bzr, git, git-core, mercurial, subversion . Дата обращения: 24 июня 2010. Архивировано 6 апреля 2014 года.
- Архивированная копия . Дата обращения: 24 июня 2010. Архивировано 17 июля 2011 года.
- см. http://subversion.apache.org/docs/ Архивная копия от 17 июня 2010 на Wayback Machine (англ.)
- Ben Collins-Sussman, Brian W. Fitzpatrick & C. Michael Pilato. Version Control with Subversion (англ.). Дата обращения: 27 ноября 2019. Архивировано 8 августа 2010 года.
- Бен Коллинз-Сассман, Брайан У. Фитцпатрик, К. Майкл Пилато. Управление версиями в Subversion . Дата обращения: 27 ноября 2019. Архивировано 18 ноября 2019 года.
- Бен Коллинз-Сассман, Брайан У. Фицпатрик, К. Майкл Пилато. История Subversion /Управление версиями в Subversion (2007). — Для Subversion 1.4. Дата обращения: 21 июля 2010. Архивировано из оригинала 25 августа 2011 года.
- Список изменений Архивная копия от 18 июня 2010 на Wayback Machine (англ.)
- Goliath Business News Архивировано 5 декабря 2008 года.
- Subversion 1.1 Release Notes . Дата обращения: 18 июня 2010. Архивировано 17 июня 2010 года.
- Subversion 1.2 Release Notes . Дата обращения: 18 июня 2010. Архивировано 17 июня 2010 года.
- Subversion 1.3 Release Notes . Дата обращения: 19 июня 2010. Архивировано 17 июня 2010 года.
- Subversion 1.4 Release Notes . Дата обращения: 18 июня 2010. Архивировано 17 июня 2010 года.
- Subversion 1.5 Release Notes . Дата обращения: 18 июня 2010. Архивировано 2 июля 2016 года.
- Subversion 1.6 Release Notes . Дата обращения: 18 июня 2010. Архивировано 17 июня 2010 года.
- Subversion переведена под контроль Apache Software Foundation Архивная копия от 23 февраля 2010 на Wayback Machine, nixp.ru
- Subversion & the Move to the Apache Software Foundation (недоступная ссылка), (видеообращение президента Subversion Corporation)
- Apache Subversion 1.7 Release Notes . Дата обращения: 12 октября 2011. Архивировано 12 октября 2011 года.
- Subversion 1.8 Release Notes . Дата обращения: 9 июля 2013. Архивировано 10 июля 2013 года.
- работа с символьными ссылками поддерживается только в рабочих копиях под UNIX-системами
- Ветви и метки в Subversion не являются независимым измерением хранилища. См. The Key Concepts Behind Branching Архивная копия от 5 октября 2015 на Wayback Machine
- Термины хранилище и репозиторий являются синонимами.
- Глава 5. Администрирование хранилища Архивная копия от 9 ноября 2017 на Wayback Machine в книге «Управление версиями в Subversion»
- Здесь перечислены операции именно с точки зрения файловой системы хранилища. В рабочей копии действия над объектами несколько иные. Однако изменения в рабочей копии, будучи зафиксированными, вызовут в хранилище описанные здесь действия. Например, команда
svn move
в рабочей копии произведёт операцииD
,A+
в хранилище. - Структура проектов на C++ с использованием Subversion и Mxx_ru Архивная копия от 19 февраля 2008 на Wayback Machine.
- Хранение сложных проектов в репозитории и установка tag’ов на несколько проектов сразу Архивная копия от 4 августа 2008 на Wayback Machine.
- Inter-File Branching in Perforce Архивировано 14 июля 2007 года.
- Path-Based Authorization . Дата обращения: 27 мая 2008. Архивировано 7 октября 2008 года.
- Типовые примеры Архивная копия от 3 декабря 2008 на Wayback Machine, раздел в книге «Управление версиями в Subversion, версия 1.4»
- Bubble-Up Method Архивная копия от 17 июня 2010 на Wayback Machine (англ.)
- В CVS каталог можно переместить прямо в хранилище средствами файловой системы, при этом файлы в нём не потеряют историю. Однако эта модификация подействует на все ревизии и ветви файлов в этого каталога (поскольку в CVS каталоги вообще не имеют версионной информации).
- Subversion FAQ . Дата обращения: 14 апреля 2010. Архивировано 15 апреля 2010 года.
- Runtime Configuration Area. Customizing Your Subversion Experience . Дата обращения: 16 сентября 2010. Архивировано из оригинала 25 августа 2011 года.
- Copy/move-related improvements in Subversion 1.5 . Дата обращения: 24 июня 2008. Архивировано 24 июня 2008 года.
- Merge tracking (foundational) . Дата обращения: 24 июня 2008. Архивировано 24 июня 2008 года.
- Subversion merge reintegrate Архивная копия от 31 августа 2009 на Wayback Machine (англ.)
- svn obliterate . Дата обращения: 21 июля 2008. Архивировано 22 ноября 2002 года.
Ссылки
- Официальная книга по Subversion (русский язык) Архивная копия от 1 августа 2013 на Wayback Machine
- Бен Коллинз-Сассман, Брайан У. Фицпатрик, К. Майкл Пилато. Управление версиями в Subversion Архивная копия от 19 декабря 2008 на Wayback Machine.
- Статьи Архивная копия от 2 июня 2008 на Wayback Machine на CollabNet Subversion Community (англ.)
- John Ferguson Smart. Merging and branching in Subversion 1.5 Архивная копия от 26 мая 2008 на Wayback Machine (англ.).
- Version Control and «the 80 %» Архивная копия от 8 июня 2008 на Wayback Machine (англ.) Бен Коллинз-Сассман о будущем Subversion и о распределённых системах. Русский перевод статьи Архивная копия от 7 апреля 2014 на Wayback Machine.
- Статья «Без дизайна иконок: Репозиторий Subversion на своём компьютере» Архивная копия от 14 марта 2009 на Wayback Machine
Эта статья входит в число хороших статей русскоязычного раздела Википедии. |
Автор: www.NiNa.Az
Дата публикации:
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер
V etoj state mozhet byt slishkom mnogo ssylok na drugie stati i vozmozhno ih kolichestvo nuzhno sokratit Pozhalujsta oformite eyo soglasno pravilam rasstanovki i oformleniya vnutrennih ssylok i udalite povtoryayushiesya ssylki i vse ssylki ne otnosyashiesya k kontekstu 15 aprelya 2023 U etogo termina sushestvuyut i drugie znacheniya sm Subversion igra Subversion takzhe izvestnaya kak SVN svobodnaya centralizovannaya sistema upravleniya versiyami oficialno vypushennaya v 2004 godu kompaniej angl S 2010 goda Subversion yavlyaetsya odnim iz proektov Apache Software Foundation i oficialno nazyvaetsya Apache Subversion zaregistrirovannyj tovarnyj znak SubversionTip centralizovannaya sistema upravleniya versiyami vd proekt Fonda Apache vd i otkrytoe programmnoe obespechenieAvtor CollabNet vd Razrabotchik Apache Software FoundationNapisana na Si Python C Java Ruby i PerlOperacionnye sistemy GNU Linux Windows macOS i BSD vd Pervyj vypusk 20 oktyabrya 2000Poslednyaya versiya 1 14 3 28 dekabrya 2023 16 mesyacev nazad 2023 12 28 Testovaya versiya 1 14 5 8 dekabrya 2024 Repozitorij svn apache org repos asf Chitaemye formaty fajlov SVN dump format v1 vd SVN dump format v2 vd SVN dump format v3 vd i SVN dump format generic vd Sozdavaemye formaty fajlov SVN dump format v1 vd SVN dump format v2 vd SVN dump format v3 vd i SVN dump format generic vd Licenziya Apache License 2 0Sajt subversion apache org angl Mediafajly na Vikisklade Cel proekta v nachale razrabotki zamenit rasprostranyonnuyu na tot moment sistemu Concurrent Versions System CVS kotoraya na segodnyashnij den schitaetsya moralno ustarevshej Subversion obladaet vsemi osnovnymi funkciyami CVS i izbavlena ot ryada nedostatkov poslednej Subversion vsyo eshyo ispolzuetsya nekotorymi soobshestvami razrabotchikov otkrytogo programmnogo obespecheniya v tom chisle soobshestvami ranee ispolzovavshimi CVS no pochti vse krupnye proekty pereshli na DVCS V chisle poslednih polzovatelej Subversion sredi otkrytyh proektov ostayotsya FreeBSD no i oni anonsirovali perehod na Git Dovolno dolgo ispolzovali Subversion takie izvestnye proekty kak Apache GCC FFmpeg LLVM Free Pascal Subversion takzhe ispolzuetsya v zakrytyh proektah i korporativnoj sfere no naskolko shiroko ocenit neprosto Hosting Subversion v tom chisle dlya proektov s otkrytym kodom takzhe predostavlyayut populyarnye hosting proekty SourceForge net Google Code i V 2007 godu analiticheskaya kompaniya Forrester sravnivaya preimushestva i nedostatki razlichnyh sistem ocenila Subversion kak edinolichnogo lidera v kategorii Standalone Software Configuration Management SCM i silnogo uchastnika v kategorii Software Configuration and Change Management SCCM Po dannym statistiki ispolzovaniya paketov Linux distributivov Debian i Ubuntu kolichestvo aktivnyh polzovatelej Subversion dostiglo maksimuma primerno v 2010 godu i nachalo snizhatsya s 2016 goda Tem ne menee kolichestvo proektov ispolzuyushih Subversion vsyo eshyo bolshe chem ispolzuyushih CVS Mercurial i Bazaar po sostoyaniyu na avgust 2019 goda V kachestve oficialnoj dokumentacii pozicioniruetsya kniga izdatelstva O Reilly Media vylozhennaya v svobodnyj dostup i dopisyvaemaya avtorami po mere vyhoda novyh versij SVN Tam zhe publikuyutsya eyo perevody na ryad yazykov v tom chisle russkij no pri tom chto angloyazychnye versii knigi sejchas opisyvayut versii 1 8 i 1 7 na russkom yazyke imeyutsya lish knigi opisyvayushie versii do 1 4 vklyuchitelno IstoriyaRazrabotka Subversion byla nachata v 2000 godu po iniciative i pri finansovoj podderzhke CollabNet Iniciatory proekta hoteli sozdat svobodnuyu sistemu upravleniya versiyami v osnovnom pohozhuyu na CVS no lishyonnuyu eyo oshibok i neudobstv V to vremya ne sushestvovalo luchshih programm etogo klassa so svobodnoj licenziej CVS byla standartom de fakto sredi razrabotchikov svobodnogo programmnogo obespecheniya Vybrav eyo za osnovu razrabotchiki Subversion nadeyalis uprostit razrabotku za schyot ispolzovaniya uzhe proverennyh koncepcij i v to zhe vremya oblegchit perehod na novuyu sistemu mnogochislennym polzovatelyam CVS Osnovnye sobytiya istorii razvitiya Subversion 31 avgusta 2001 goda komanda razrabotchikov pereshla s CVS na Subversion dlya upravleniya sobstvennym ishodnym kodom Subversion stala samodostatochnoj 23 fevralya 2004 goda vyshla versiya 1 0 0 K etomu vremeni Subversion uzhe ispolzovalas primerno na 1400 serverah s otkrytym dostupom 29 sentyabrya 2004 goda poyavilsya reliz 1 1 0 Sredi osnovnyh novovvedenij novyj format hranilisha na osnove obychnyh fajlov FSFS v dopolnenie k sushestvovavshemu ranee s ispolzovaniem Berkeley DB 21 maya 2005 goda vyshel reliz 1 2 0 v kotorom dobavlena vozmozhnost blokirovki fajlov chto pozvolilo uluchshit podderzhku klientov WebDAV DeltaV v tom chisle realizovat avtomaticheskoe sozdanie novyh versij pri redaktirovanii fajlov s pomoshyu takih klientov Nachinaya s etogo reliza Subversion po umolchaniyu ispolzuet FSFS dlya novyh hranilish 30 dekabrya 2005 goda vyshel reliz 1 3 0 Osnovnymi izmeneniyami yavlyayutsya vozmozhnost ustanavlivat prava dostupa k katalogam pri ispolzovanii svnserve dopolnitelnye vozmozhnosti komand a takzhe mnozhestvo uluchshenij dlya razrabotchikov 10 sentyabrya 2006 goda vyshel reliz 1 4 0 On podderzhivaet rabotu s BerkeleyDB 4 4 i mozhet ispolzovat eyo funkcii samovosstanovleniya Ranee pri sboyah Subversion hranilishe ispolzuyushee BerkeleyDB moglo ostatsya v zaklinennom sostoyanii i trebovalos vmeshatelstvo administratora dlya vosstanovleniya raboty sistemy pri ispolzovanii FSFS etoj problemy net 19 iyunya 2008 goda vyshel reliz 1 5 0 v nyom sdelano mnozhestvo uluchshenij samym znachitelnym iz kotoryh yavlyaetsya bazovaya podderzhka otslezhivaniya sliyanij angl merge tracking Eta vozmozhnost delaet process sliyaniya paketov v Subversion bolee prostym i nadyozhnym 20 marta 2009 goda vyshel reliz 1 6 0 Uluchsheniya podderzhki svn externals obnaruzhenie konfliktov derevev angl tree conflict uluchshenie effektivnosti hraneniya dannyh v repozitorii i drugie vnesyonnye izmeneniya V fevrale 2010 goda proekt Subversion byl oficialno perevedyon pod upravlenie Apache Software Foundation ASF Prezident Subversion Corporation i direktor Open Source v WANdisco vystupil s videoobrasheniem v kotorom s entuziazmom poobeshal vsem chto perehod Subversion k ASF budet lish sposobstvovat bolee aktivnomu razvitiyu proekta 11 oktyabrya 2011 goda sostoyalsya reliz 1 7 Osnovnye uluchsheniya teper tolko odna papka svn v korne rabochej kopii uskorena rabota po HTTP dobavlena utilita svnrdump novaya komanda svn patch 18 iyunya 2013 goda vyshel reliz 1 8 0 Apache Subversion 1 8 yavlyaetsya rasshireniem vseh predydushih vypuskov Subversion Obshie svedeniyaVozmozhnosti Hranenie polnoj istorii izmenenij otslezhivaemyh obektov fajlov katalogov simvolnyh ssylok v centralizovannom hranilishe repozitorii v tom chisle pri izmenenii atributov metadannyh peremeshenii pereimenovanii i udalenii Kopirovanie obektov s razvetvleniem istorii pri kopirovanii v hranilishe poyavlyayutsya dva otdelnyh obekta s obshej istoriej Podderzhka perenosa izmenenij mezhdu kopiyami obektov v tom chisle polnogo sliyaniya kopij v rabochej kopii bez obedineniya istorii Emulyaciyavetvleniya sozdanie vetvej s pomoshyu kopirovaniya katalogov i posleduyushaya nezavisimaya rabota s nimi sliyanie vetvej s avtomaticheskim opredeleniem i perenosom izmenenij Emulyaciyametok kopirovaniem katalogov Istoriya izmenenij i kopii obektov v tom chisle vetvi i metki hranyatsya v vide svyazannyh raznostnyh kopij deshyovyh ne trebuyushih bolshih vremenny h i diskovyh resursov pri sozdanii i hranenii Podderzhka konkurentnoj v tom chisle odnovremennoj s izolyaciej tranzakcij mnogopolzovatelskoj raboty s hranilishem i v bolshinstve sluchaev avtomaticheskim sliyaniem izmenenij razlichnyh razrabotchikov v rabochej kopii Fiksacii izmenenij v hranilishe v tom chisle mnogoobektnye organizuyutsya v vide atomarnyh tranzakcij Setevoj obmen mezhdu serverom i klientom predusmatrivaet peredachu tolko razlichij mezhdu rabochej kopiej i hranilishem Obespechivaetsya odinakovo effektivnaya rabota kak s tekstovymi tak i s dvoichnymi fajlami Razlichnye varianty dostupa k hranilishu v tom chisle neposredstvennyj dostup na lokalnoj fajlovoj sisteme po sobstvennomu setevomu protokolu cherez veb server po protokolu WebDAV Vyvod klienta komandnoj stroki odinakovo udoben i dlya chteniya i dlya razbora programmami Vozmozhnost zerkalirovaniya hranilisha Dva vozmozhnyh vnutrennih formata hranilisha angl repository baza dannyh ili nabor obychnyh fajlov Internacionalizirovannye soobsheniya programmy ispolzuyutsya nastrojki lokali Biblioteki dlya yazykov PHP Python Perl Java pozvolyayut vstroit funkcionalnost klienta Subversion v programmy napisannye na etih yazykah Mnogourovnevaya arhitektura bibliotek iznachalno rasschitannaya na klient servernuyu modelModel raboty Subversion centralizovannaya sistema v otlichie ot raspredelyonnyh sistem takih kak Git ili Mercurial to est dannye hranyatsya v edinom hranilishe Hranilishe mozhet raspolagatsya na lokalnom diske ili na setevom servere Rabota v Subversion malo otlichaetsya ot raboty v drugih centralizovannyh sistemah upravleniya versiyami Klienty kopiruyut fajly iz hranilisha sozdavaya lokalnye rabochie kopii zatem vnosyat izmeneniya v rabochie kopii i fiksiruyut eti izmeneniya v hranilishe Neskolko klientov mogut odnovremenno obrashatsya k hranilishu Dlya sovmestnoj raboty nad fajlami v Subversion preimushestvenno ispolzuetsya model kopirovanie izmenenie sliyanie Krome togo dlya fajlov ne dopuskayushih sliyanie razlichnye binarnye formaty fajlov mozhno ispolzovat model blokirovanie izmenenie razblokirovanie Pri sohranenii novyh versij ispolzuetsya delta kompressiya sistema nahodit otlichiya novoj versii ot predydushej i zapisyvaet tolko ih izbegaya dublirovaniya dannyh Pri ispolzovanii dostupa s pomoshyu WebDAV takzhe podderzhivaetsya prozrachnoe upravlenie versiyami esli lyuboj klient WebDAV otkryvaet dlya zapisi i zatem sohranyaet fajl hranyashijsya na setevom resurse to avtomaticheski sozdayotsya novaya versiya Tipy repozitoriev Subversion predlagaet dva varianta organizacii repozitoriev Repozitorii pervogo tipa ispolzuyut dlya hraneniya bazy dannyh na osnove Berkeley DB repozitorii vtorogo tipa obychnye fajly specialnogo formata dostup k dannym organizuetsya s pomoshyu sobstvennyh bibliotek bez ispolzovaniya storonnih baz dannyh Razrabotchiki Subversion chasto nazyvayut hranilishe fajlovoj sistemoj poetomu vtoroj tip poluchil nazvanie FSFS to est versionirovannaya fajlovaya sistema angl File System poverh obychnoj fajlovoj sistemy Oba tipa repozitoriev obespechivayut dostatochnuyu nadyozhnost pri pravilnoj organizacii Berkeley DB ispolzuet blokirovki fajlov poetomu eyo nelzya ispolzovat na nekotoryh setevyh fajlovyh sistemah ne podderzhivayushih blokirovok kazhdaya iz nih obladaet svoimi preimushestvami i nedostatkami Schitaetsya chto FSFS legche pravilno nastroit ona trebuet menshego vnimaniya ot administratora Krome togo do reliza 1 4 hranilisha ispolzuyushie Berkeley DB mogli pri opredelyonnyh usloviyah okazatsya v tak nazyvaemom zaklinennom angl wedged sostoyanii trebovalos vmeshatelstvo administratora dlya vosstanovleniya ego rabotosposobnosti Nachinaya s reliza 1 2 dlya novyh hranilish po umolchaniyu ispolzuetsya FSFS Pri vypuske reliza 1 8 ispolzovanie Berkeley DB bylo obyavleno nerekomendovannym Novye vozmozhnosti kotorye budut dobavleny v sleduyushih relizah mogut ne rabotat na serverah ispolzuyushih Berkeley DB V dalnejshem podderzhka Berkeley DB mozhet byt prekrashena Dostup k repozitoriyu Subversion predostavlyaet sleduyushie sposoby dostupa k repozitoriyu pryamoj dostup k repozitoriyu na diske na lokalnoj ili setevoj fajlovoj sisteme udalyonnyj dostup po protokolu WebDAV poverh HTTP ili HTTPS s ispolzovaniem modulya mod dav svn dlya veb servera Apache 2 udalyonnyj dostup s ispolzovaniem sobstvennogo protokola SVN na vydelennom setevom soedinenii po umolchaniyu na TCP portu 3690 cherez standartnyj vvod vyvod v tom chisle cherez sredstva udalyonnogo CLI naprimer SSH Vse eti sposoby mogut byt ispolzovany dlya raboty s repozitoriyami oboih tipov FSFS i Berkeley DB Dlya dostupa k odnomu i tomu zhe repozitoriyu mogut odnovremenno ispolzovatsya raznye sposoby Osnovnye koncepciiFajlovaya sistema Ris 1 Dvumernoe predstavlenie fajlovoj sistemy v Subversion S tochki zreniya polzovatelya hranilishe Subversion predstavlyaet soboj dvumernuyu fajlovuyu sistemu Obekty v hranilishe fajly i katalogi identificiruyutsya dvumya koordinatami imenem i nomerom revizii Drugimi slovami hranilishe predstavlyaet soboj massiv mgnovennyh snimkov revizij dereva fajlov i katalogov indeksiruemyj nomerom revizii Kazhdyj takoj snimok obychnaya odnomernaya fajlovaya sistema Pri neobhodimosti ukazaniya na konkretnuyu reviziyu obekta ispolzuetsya zapis vida imya reviziya naprimer main c 29 fajl main c v revizii 29 Takoe ukazanie revizii ispolzuemoe dlya utochneniya imeni nazyvaetsya sterzhnevaya reviziya angl peg revision Na ris 1 pokazano graficheskoe predstavlenie fajlovoj sistemy vertikalnaya os sootvetstvuet mnozhestvu imyon gorizontalnaya mnozhestvu revizij Imena fajlov Imya obekta fajlovoj sistemy v Subversion obrazuetsya po tem zhe pravilam chto i v UNIX podobnyh operacionnyh sistemah sushestvuet tolko odin kornevoj katalog elementy puti razdelyayutsya kosoj chertoj Obektami fajlovoj sistemy yavlyayutsya fajly i katalogi a takzhe simvolicheskie ssylki kotorye emuliruyutsya iz obychnyh fajlov putyom ustanovki atributa svn special Nomera revizij Nomer revizii v Subversion eto naturalnoe chislo ili 0 dlya samoj pervoj revizii adresuyushee nomer sostoyaniya hranilisha v processe izmeneniya soderzhashihsya v nyom dannyh Kazhdaya uspeshnaya fiksaciya izmenenij porozhdaet rovno odnu novuyu reviziyu v hranilishe to est N ya reviziya eto sostoyanie hranilisha posle N j fiksacii V Subversion reviziya harakterizuet sostoyanie ne otdelnogo fajla a vsego hranilisha v celom Naprimer reviziya 32 obvedeno punktirom na risunke eto sostoyanie chetyryoh fajlov i dvuh katalogov sushestvovavshih v hranilishe na tot moment Nomer revizii yavlyaetsya analogom vremeni v tom smysle chto menshie nomera revizij sootvetstvuyut bolee rannim sostoyaniyam hranilisha a bo lshie pozdnim Minimalnyj nomer revizii 0 nol sootvetstvuet iznachalnomu sostoyaniyu hranilisha kogda eshyo ne bylo zafiksirovano ni odnoj pravki V nulevoj revizii hranilishe soderzhit tolko pustoj kornevoj katalog Maksimalnyj nomer revizii sootvetstvuet samomu poslednemu sostoyaniyu hranilisha to est sostoyaniyu posle fiksacii poslednej pravki Vmesto ukazaniya nomera poslednej revizii mozhno ispolzovat klyuchevoe slovo HEAD golovnaya reviziya eto udobno poskolku nomer golovnoj revizii uvelichivaetsya pri kazhdoj fiksacii izmenenij Nomer revizii mozhno rassmatrivat kak nekuyu vremennu yu otmetku v istorii hranilisha Bolee togo s kazhdym nomerom revizii svyazano absolyutnoe znachenie vremeni kogda eta reviziya byla sdelana svojstvo svn date Odnako ukazanie nomera revizii udobnee chem ukazanie vremeni tak kak net putanicy s chasovymi poyasami zapis nomera koroche i nomer revizii ne mozhet byt izmenyon Operativnaya i sterzhnevaya revizii Ris 2 Ukazanie sterzhnevoj revizii Nomer revizii ispolzuetsya v dvuh razlichnyh kontekstah operativnoj revizii angl operative revision sterzhnevoj revizii angl peg revision Reviziya nazyvaetsya operativnoj esli ona ukazyvaet reviziyu ili diapazon revizij k kotoromu dolzhna byt primenena operaciya naprimer svn log r 199 230 http some path V dannom primere vypolnyaetsya komanda svn log dlya diapazona revizij 199 230 kotoryj i yavlyaetsya diapazonom operativnyh revizij Odnako ukazanie tolko imeni fajla i operativnoj revizii inogda mozhet neodnoznachno ukazyvat na obekty hranilisha Naprimer v situacii pokazannoj na ris 2 voznikaet neodnoznachnost pri vypolnenii sleduyushej komandy svn log r 29 33 http some path bar txt V komande ukazan diapazon operativnyh revizij 29 33 no oblasti vydelennye na risunke golubym i zelyonym fonom v ravnoj stepeni mozhno schitat istoriej fajla bar txt v diapazone revizij 29 33 V podobnyh sluchayah neobhodimo ukazyvat eshyo i sterzhnevuyu reviziyu dlya razresheniya neodnoznachnosti Sterzhnevaya reviziya eto nomer revizii ukazannyj v dopolnenie k URL obekta fajlovoj sistemy ispolzuetsya zapis vida URL reviziya Nazvanie proishodit ot anglijskogo slova peg kotoroe mozhno perevesti kak sterzhen ili kolyshek Sterzhnevaya reviziya otmechaet tu cepochku sostoyanij kotoroj prinadlezhit ukazannaya para URL reviziya i takim obrazom odnoznachno identificiruet obekt hranilisha k kotoromu dolzhna byt primenena komanda V privedyonnom nizhe primere pervaya komanda vyvedet istoriyu vydelennuyu na risunke golubym fonom a vtoraya istoriyu vydelennuyu zelyonym fonom svn log r 29 33 http some path file txt 32 svn log r 29 33 http some path bar txt 34 V kachestve sterzhnevoj revizii sleduet ukazyvat kak mozhno bolee pozdnee sostoyanie interesuyushego obekta Prichina etogo v tom chto cepochka sostoyanij odnoznachno otslezhivaetsya nazad no ne vperyod Naprimer URL so sterzhnevoj reviziej http some path foo txt 31 prinadlezhit dvum cepochkam sostoyanij vydeleny sootvetstvenno zelyonym i serym fonom Iz etih dvuh cepochek ukazannyj URL adresuet seruyu cepochku to est pri dvizhenii vperyod ot sterzhnevoj revizii operacii kopirovaniya ignoriruyutsya Operacii nad fajlovoj sistemoj Nad obektami fajlovoj sistemy v hranilishe Subversion mogut byt proizvedeny perechislennye nizhe operacii sm ris 1 V skobkah ukazano kratkoe imenovanie operacii v oboznacheniyah komandy svn status Dobavlenie A Dobavlenie obekta v fajlovuyu sistemu Dobavlennyj obekt ne imeet istorii revizij Primer na risunke fajl main c byl dobavlen v revizii 27 Modifikaciya M Modifikaciya obekta naprimer izmenenie soderzhimogo fajla ili izmenenie svojstv fajla ili kataloga Primer na risunke fajl main c byl modificirovan v revizii 28 Udalenie D Udalenie fajla iz golovnoj i posleduyushih revizij Pri etom fajl ostayotsya v predydushih reviziyah Primer na risunke fajl main c byl udalyon v revizii 30 Dobavlenie s istoriej A Predstavlyaet soboj kopirovanie obekta vnutri fajlovoj sistemy hranilisha to est obekt imya istochnika reviziya istochnika kopiruetsya v imya kopii HEAD Skopirovannyj obekt nasleduet ot istochnika istoriyu revizij do momenta kopirovaniya nasledovanie istorii pokazano na risunke punktirnymi svyazyami Primery na risunke v revizii 29 katalog tags R1 byl skopirovan s kataloga trunk 27 v revizii 31 fajl main c byl skopirovan s main c 29 to est s bolee rannej revizii samogo sebya takim obrazom proizvedeno vosstanovlenie ranee udalyonnogo v revizii 30 fajla s sohraneniem istorii revizij Zamena R Imeet mesto v sluchae kogda v odnoj revizii proizvedeno i udalenie obekta D i dobavlenie s istoriej A obekta s tem zhe samym imenem Hotya imya pri operacii zameny ostayotsya neizmennym Subversion rassmatrivaet obekt do i posle zameny kak dva razlichnyh obekta s razlichnymi istoriyami revizij istoriya starogo zakanchivaetsya v tochke zameny istoriya novogo nasleduetsya ot istochnika kopirovaniya i prodolzhaetsya dalee Primer na risunke v revizii 30 fajl file txt byl zamenyon staryj fajl file txt udalyon a novyj fajl s tem zhe imenem skopirovan s fajla bar txt 29 Fiksaciya izmenenij Rabochaya kopiya Rabochaya kopiya eto sozdannaya klientskoj programmoj Subversion lokalnaya kopiya chasti dannyh iz hranilisha soderzhashaya pomimo sobstvenno dannyh nekotoruyu sluzhebnuyu informaciyu skrytye katalogi s imenem svn Sluzhebnaya informaciya neobhodima dlya pravilnogo funkcionirovaniya rabochej kopii chto libo menyat v sluzhebnyh dannyh nelzya Minimalnoj edinicej dannyh kotoruyu mozhno poluchit iz hranilisha kak rabochuyu kopiyu yavlyaetsya katalog Soderzhimoe kataloga mozhno izvlech ne polnostyu naprimer mozhno isklyuchit otdelnye fajly ili podkatalogi Odnako izvlech iz hranilisha otdelnyj fajl kak rabochuyu kopiyu nevozmozhno Lyuboj podkatalog rabochej kopii Subversion 1 6 i bolee rannih versij takzhe yavlyaetsya polnocennoj rabochej kopiej poskolku v kazhdom kataloge hranyatsya ego sluzhebnye dannye katalogi svn Nachinaya s versii 1 7 v kazhdoj rabochej kopii prisutstvuet tolko odin katalog svn v korne eyo kataloga Rabochaya kopiya yavlyaetsya samodostatochnoj v tom smysle chto Subversion ne hranit kakih libo dannyh otnosyashihsya k rabochej kopii vne eyo Poetomu imeya odnu rabochuyu kopiyu mozhno sdelat eshyo neskolko kopij prostym kopirovaniem bez zatrat setevogo trafika V sluzhebnyh katalogah rabochej kopii pomimo prochego hranitsya tak nazyvaemaya chistaya kopiya angl pristine copy fajly rabochej kopii v neizmenyonnom vide kak oni byli izvlecheny iz hranilisha dlya svn eto reviziya s imenem BASE Nalichie chistoj kopii pozvolyaet bystro i bez obrasheniya k hranilishu vypolnyat operacii prosmotra i otkata lokalnyh izmenenij Odnako razmer rabochej kopii na diske primerno v dva raza bolshe dannye chistaya kopiya dannyh chem razmer samih dannyh Takoj podhod obuslovlen tem chto diskovye resursy deshevle i dostupnee chem resursy seti peredachi dannyh Kak pravilo sozdanie rabochej kopii yavlyaetsya pervym i neobhodimym etapom dlya fiksacii lokalnyh izmenenij poskolku zafiksirovat v hranilishe mozhno tolko izmeneniya sdelannye v rabochej kopii Isklyucheniem yavlyayutsya operacii kotorye mogut byt vypolneny pryamo v hranilishe bez sozdaniya rabochej kopii Tranzakcii Rabota s hranilishem v Subversion organizovana v forme tranzakcij so svojstvami atomarnosti i izolyacii iz nabora svojstv ACID Takim obrazom sistema upravleniya versiyami garantiruet celostnost neprotivorechivost i dostupnost hranilisha v lyuboj moment vremeni Atomarnost fiksacij angl atomic commits izmeneniya v neskolkih fajlah ili katalogah fiksiruyutsya edinoj tranzakciej porozhdaya pri etom odnu reviziyu V sluchae neudachnoj fiksacii pri lyubom sboe ili oshibke sistema garantiruet chto hranilishe ne okazhetsya v chastichno izmenyonnom sostoyanii v hranilishe popadut libo vse izmeneniya libo pri neudache ni odnogo Izolyaciya garantiruet chto promezhutochnye sostoyaniya hranilisha vnutri tranzakcii ne vidny drugim tranzakciyam i polzovatelyam Naprimer esli odin polzovatel fiksiruet odnoj tranzakciej izmeneniya v neskolkih fajlah to drugie polzovateli ne mogut uvidet takogo sostoyaniya hranilisha v kotorom chast fajlov uzhe izmenena a chast ne izmenena Dannye svojstva ne garantiruyutsya dlya rabochej kopii Subversion ona v otlichie ot hranilisha pri sboe ili preryvanii mozhet okazatsya v promezhutochnom ili zablokirovannom sostoyanii to est pered prodolzheniem raboty eyo potrebuetsya vosstanovit komandoj svn cleanup ili peresozdat zanovo Lokalnye i udalyonnye formy komand Vse komandy klienta Subversion mozhno razdelit na sleduyushie gruppy modificiruyushie rabochuyu kopiyu modificiruyushie hranilishe modificiruyushie i rabochuyu kopiyu i hranilishe ne modificiruyushie nichego Struktura hranilisha Struktura proekta v hranilishe Formalno Subversion ne nakladyvaet kakih libo ogranichenij na fajlovuyu strukturu proekta ona mozhet byt kakoj ugodno v ramkah pravil imenovaniya obektov fajlovoj sistemy Tem ne menee sushestvuyut rekomendacii prizvannye oblegchit rabotu s vetvyami i metkami V prostejshem sluchae v kornevom kataloge hranilisha rekomenduetsya sozdat kak minimum tri podkataloga branches tags trunk Vsya fajlovaya struktura proekta osnovnoj linii razrabotki dolzhna soderzhatsya v podkataloge trunk podkatalog branches dolzhen soderzhat vetvi proekta a tags metki Naprimer sleduyushaya struktura katalogov hranilisha branches branch 1 tags tag 1 tag 2 trunk predpolagaet nalichie u proekta trunk odnoj vetvi branch 1 i dvuh metok tag 1 i tag 2 Kazhdyj iz etih katalogov trunk branch 1 tag 1 i tag 2 soderzhit kopiyu sootvetstvuyushej versii proekta Esli pod proektov v hranilishe neskolko to takaya struktura podkatalogov sozdayotsya dlya kazhdogo pod proekta project1 branches tags trunk project2 branches tags trunk To est v kornevom kataloge nahodyatsya katalogi proektov i v kazhdom iz nih est svoi trunk branches tags otnosyashiesya tolko k etomu proektu Opisannye struktury katalogov hranilisha yavlyayutsya lish primerami na praktike hranilishe mozhno organizovat takim sposobom kotoryj optimalno podhodit v dannom konkretnom sluchae Drugim sposobom hraneniya neskolkih proektov yavlyaetsya sozdanie neskolkih hranilish V raznyh hranilishah sleduet raspolagat proekty kotorye nikak ne svyazany mezhdu soboj poskolku mezhdu hranilishami nelzya budet vypolnit operacii kopirovaniya peremesheniya i sliyaniya Neskolko hranilish mozhno pri neobhodimosti obedinit v odno s sohraneniem istorii revizij putyom importa komandoj svnadmin load s parametrom parent dir Vetvi Osnovnaya statya Vetv upravlenie versiyami Subversion ispolzuet fajlovuyu model takuyu zhe kak i v Perforce dlya realizacii vetvej i metok to est vetv yavlyaetsya obychnym katalogom mozhno takzhe sdelat vetv iz odnogo fajla a ne kataloga Novaya vetv sozdayotsya komandoj svn copy Vetv mozhet byt sozdana v lyubom kataloge hranilisha odnako imeet smysl priderzhivatsya opisannyh vyshe soglashenij o tom gde sozdavat novye vetvi Bolee podrobnaya informaciya o vetvyah privedena v razdelah Vetvlenie i Sliyanie Metki Sozdanie metki takzhe proizvoditsya komandoj svn copy to est tehnicheski ne otlichaetsya ot sozdaniya vetvi Otlichie tolko v sposobe ispolzovaniya predpolagaetsya chto nikto ne budet izmenyat dannye v metke fiksirovat v neyo izmeneniya Naprimer na ris 1 metka sozdana v revizii 29 katalog trunk iz revizii 27 skopirovan pod imenem tags R1 Teper esli ne izmenyat dannye v kataloge tags R1 to on navsegda ostanetsya tochnoj kopiej kataloga trunk 27 to est budet metkoj Koncepciya metok ispolzuemaya v Subversion otlichaetsya ot koncepcii metok v drugih sistemah upravleniya versiyami Obychno metka yavlyaetsya simvolicheskim imenem kotoroe adresuet nabor fajlov i ih sostoyanie V Subversion metka kopiruet nabor fajlov i ih sostoyanie Metki kopii v Subversion imeyut svoi dostoinstva i nedostatki Dostoinstva metka vidna v strukture katalogov mozhno sdelat udobnuyu drevovidnuyu organizaciyu metok Nedostatki trudno uznat v kakie metki voshyol fajl to zhe dlya kataloga esli prava dostupa ustanovleny individualno dlya katalogov to metka eti prava ne nasleduet soderzhimoe metki mozhet byt izmeneno esli iz metki sozdat rabochuyu kopiyu i zafiksirovat iz etoj rabochej kopii kakie libo izmeneniya to eto izmenit samu metku a ne te dannye kotorye byli pomecheny Pravilnym sposobom raboty ot metki yavlyaetsya sozdanie rabochej kopii ne iz metki a iz togo chto yavlyaetsya istochnikom etoj metki Svojstva properties Odnoj iz vazhnyh vozmozhnostej Subversion yavlyaetsya podderzhka svojstv to est tekstovyh par imya znachenie kotorye mogut byt ustanovleny dlya obektov v hranilishe Svojstva ispolzuyutsya v dvuh razlichnyh kontekstah dlya obektov fajlovoj sistemy i dlya revizij Svojstva obektov fajlovoj sistemy Kazhdomu fajlu ili katalogu v hranilishe mozhet byt prisvoen nabor svojstv Izmeneniya svojstv sohranyayutsya v istorii tak zhe kak i izmeneniya v fajlovoj sisteme Polzovateli mogut ustanavlivat svojstva s lyubymi imenami sushestvuet takzhe predopredelyonnyj nabor sluzhebnyh svojstv kotorye ispolzuyutsya klientskoj programmoj Subversion imena sluzhebnyh svojstv imeyut prefiks svn Svojstva fajlov svn executable Delaet fajl ispolnyaemym dlya rabochih kopij pod operacionnymi sistemami semejstva UNIX svn mime type Hranit MIME tip fajla Vliyaet na sposob raboty komand pokazyvayushih raznicu fajlov a takzhe obedinyayushih izmeneniya merging svn keywords Spisok klyuchevyh slov angl keywords kotorye budut zameneny v fajle sootvetstvuyushimi znacheniyami Chtoby zamena proizoshla klyuchevoe slovo dolzhno prisutstvovat v fajle v vide keyword Ispolzuetsya dlya togo chtoby avtomaticheski obnovlyat v fajle znacheniya menyayushiesya ot versii k versii naprimer nomer revizii svn eol style Opredelyaet pravilo preobrazovaniya simvolov konca stroki angl end of line EOL v tekstovom fajle Ispolzuetsya v sluchayah kogda fajl dolzhen imet konkretnyj tip simvolov EOL Obychno ispolzuetsya native pri etom tip simvolov konca stroki sootvetstvuet prinyatomu v toj operacionnoj sisteme v kotoroj proishodit sozdanie rabochej kopii svn needs lock Oznachaet chto pri izvlechenii iz hranilisha fajl budet dostupen tolko dlya chteniya Eto svojstvo prednaznacheno dlya ispolzovaniya sovmestno s mehanizmom blokirovki Zapret zapisi v fajl yavlyaetsya napominaniem togo chto nado poluchit blokirovku na etot fajl prezhde chem ego redaktirovat pri poluchenii blokirovki klientskaya programma Subversion avtomaticheski delaet fajl dostupnym dlya zapisi snyatie blokirovki snova delaet fajl zashishyonnym ot modifikacij Blokirovki mogut byt ispolzovany i bez ustanovki etogo svojstva Odnako delat eto ne rekomenduetsya tak kak sushestvuet risk togo chto drugoj polzovatel mozhet nachat redaktirovat zablokirovannyj fajl i eto obnaruzhitsya tolko pri fiksacii izmenenij svn special Svojstvo ne prednaznacheno dlya ustanovki ili modifikacii polzovatelyami V nastoyashee vremya ispolzuetsya dlya hraneniya simvolnyh ssylok v repozitorii Kogda simvolnaya ssylka dobavlyaetsya v repozitorij v repozitorii sozdayotsya fajl s ustanovlennym svojstvom svn special Kogda etot fajl izvlekaetsya v UNIX podobnoj sisteme klientskaya programma Subversion preobrazuet ego obratno v ssylku svn mergeinfo Hranit informaciyu o tom iz kakih putej bylo proizvedeno sliyanie v etot fajl Svojstvo vvedeno v versii 1 5 ono ispolzuetsya dlya otslezhivaniya sliyanij angl merge tracking Predstavlyaet soboj nabor strok vida imya fajla diapazon revizij Zdes imya fajla polnoe s putyom ot kornya fajlovoj sistemy repozitoriya imya fajla ili kataloga otkuda bylo proizvedeno sliyanie ukazannogo diapazona revizij Stroki modificiruyutsya avtomaticheski pri operaciyah sliyaniya pri posleduyushih sliyaniyah Subversion uchityvaet ranee vpisannye stroki izbegaya tem samym povtornyh sliyanij odnih i teh zhe izmenenij Ne rekomenduetsya izmenyat svojstvo svn mergeinfo vruchnuyu eto mozhet narushit mehanizm otslezhivaniya sliyanij Svojstva katalogov svn ignore Spisok shablonov imyon fajlov i katalogov kotorye klientskaya programma Subversion budet ignorirovat v dannom kataloge Eto svojstvo analogichno fajlu cvsignore v CVS Kak pravilo svojstvo nastraivaetsya takim obrazom chtoby klientskaya programma ne videla fajly i katalogi kotorye avtomaticheski sozdayutsya razlichnymi programmami i ne dolzhny byt versionirovany naprimer obektnye fajly vremennye fajly i t p Dejstvie etogo svojstva ne rasprostranyaetsya na podkatalogi svn externals Pozvolyaet avtomaticheski izvlech v rabochuyu kopiyu nabor katalogov ukazav ih URL mozhno dazhe iz drugogo hranilisha svn mergeinfo To zhe chto i dlya fajlov Svojstva revizij Vtoroj tip obektov dlya kotoryh sushestvuyut svojstva eto sami revizii V etom sluchae imena svojstv takzhe mogut byt lyubymi nekotorye svojstva s prefiksom svn imeyut specialnoe znachenie Otlichie svojstv revizij ot svojstv obektov fajlovoj sistemy v tom chto dlya pervyh ponyatie istorii versij ne primenimo poskolku konkretnoe znachenie svojstva pripisano odnoj revizii Drugimi slovami svojstva revizij mozhno izmenit no staroe znachenie pri etom teryaetsya Po umolchaniyu izmenenie svojstv revizij zapresheno dlya razresheniya administrator dolzhen sozdat skript angl hook obrabotki sobytiya pre revprop change svn date Data i vremya sozdaniya revizii svn author Imya polzovatelya kotoryj zafiksiroval izmeneniya voshedshie v etu reviziyu svn log Opisanie izmenenij zafiksirovannyh v etoj revizii tekst vvedyonnyj polzovatelem pri fiksacii izmenenij Kak pravilo svojstva revizij izmenyayutsya tolko administratorom hranilisha v celyah ispravleniya nekorrektnyh dannyh Naprimer esli polzovatel zabyl ukazat tekstovoe opisanie pri fiksacii svoih izmenenij to administrator mozhet sozdat eto opisanie putyom redaktirovaniya svojstva svn log Ispolzovanie SubversionRabochij cikl Tipichnaya iteraciya rabochego cikla s Subversion vklyuchaet sleduyushie etapy Obnovlenie rabochej kopii iz hranilisha svn update ili eyo sozdanie svn checkout Izmenenie rabochej kopii Izmeneniya katalogov i informacii o fajlah proizvoditsya sredstvami Subversion v izmenenii zhe soderzhimogo fajlov Subversion nikak ne zadejstvovan izmeneniya proizvodyatsya programmami prednaznachennymi dlya etogo tekstovye redaktory sredstva razrabotki i t p novye eshyo ne zafiksirovannye v hranilishe fajly i katalogi nuzhno dobavit komanda svn add to est peredat pod upravlenie versiyami esli fajl ili katalog v rabochej kopii nuzhno udalit pereimenovat peremestit ili skopirovat neobhodimo ispolzovat sredstva Subversion svn mkdir svn delete svn move svn copy prosmotr sostoyaniya rabochej kopii i lokalnyh eshyo ne zafiksirovannyh izmenenij svn info svn status svn diff lyubye lokalnye izmeneniya esli oni priznany neudachnymi mozhno otkatit svn revert Pri neobhodimosti dopolnitelnoe obnovlenie dlya polucheniya izmenenij zafiksirovannyh v hranilishe drugimi polzovatelyami i sliyaniya etih izmenenij so svoimi svn update Fiksaciya svoih izmenenij i ili rezultatov sliyaniya v hranilishe svn commit Vetvlenie Vetvlenie yavlyaetsya vazhnym aspektom raboty sistem upravleniya versiyami poskolku tipichnye priyomy upravleniya versiyami po krajnej mere pri razrabotke programmnogo obespecheniya vklyuchayut v sebya ispolzovanie vetvej Subversion obladaet dostatochno razvitymi vozmozhnostyami dlya vetvleniya i sliyaniya odnako ne podderzhivaet sliyanie pereimenovannyh fajlov i katalogov Ris 3 Primer evolyucii vetvej v Subversion Na ris 3 uslovno pokazan primer evolyucii vetvej v hranilishe Zelyonym cvetom pokazana osnovnaya liniya razrabotki proekta angl mainline trunk zhyoltym vetvi sinim metki purpurnym vetv razrabotka kotoroj prekrashena Krasnymi strelkami pokazany sliyaniya izmenenij Sozdanie vetvej Novaya vetv a takzhe metka sozdayotsya komandoj svn copy kotoraya sozdayot v hranilishe kopiyu s nasledovaniem istorii revizij istochnika operaciya A Dlya sozdaniya vetvej vsegda sleduet ispolzovat udalyonnuyu formu komandy svn copy naprimer svn copy http trunk dir http branches branch name m Creating a branch of dir Poluchennaya kopiya budet vetvyu ili metkoj v zavisimosti ot sposoba raboty s nej V dalnejshem izmeneniya sdelannye na vetvi mogut byt vneseny v istochnik iz kotorogo byla sozdana eta vetv takoe rasprostranenie izmenenij nazyvaetsya sliyanie angl merge Operacii kopirovaniya v Subversion deshyovye angl cheap copy to est trebuyut nebolshogo fiksirovannogo kolichestva vremeni i diskovogo prostranstva Hranilishe sproektirovano takim obrazom chto pri lyubom kopirovanii proishodit ne dublirovanie dannyh a sozdanie ssylki na istochnik analogichno zhyostkoj ssylke odnako etot mehanizm chisto vnutrennij s tochki zreniya polzovatelya proishodit imenno sozdanie kopii Blagodarya vysokoj effektivnosti sozdaniya vetvej ih mozhno sozdavat nastolko chasto naskolko eto neobhodimo odnako sliyanie neobhodimoe dopolnenie k vetvleniyu vypolnyaetsya v Subversion medlennee chem v drugih sovremennyh sistemah upravleniya versiyami Rabota s vetvyami V celom rabota na vetvi ne otlichaetsya ot raboty na osnovnoj linii razrabotki trunk Specifichnye komandy trebuyutsya tolko dlya dejstvij v kotoryh zadejstvovano bolee odnoj vetvi K takim komandam otnosyatsya pomimo komandy sozdaniya vetvi svn copy svn switch pereklyuchenie imeyushejsya rabochej kopii na druguyu vetv V rezultate pereklyucheniya sluzhebnye dannye rabochej kopii izmenyayutsya tak kak budto eta rabochaya kopiya poluchena operaciej svn checkout iz toj vetvi na kotoruyu ona pereklyuchena Pri etom obyom setevogo trafika menshe chem pri svn checkout tak kak peredayotsya tolko raznica mezhdu dannymi v rabochej kopii i celevoj vetvyu svn merge kopirovanie nabora izmenenij mezhdu vetvyami ispolzuetsya dlya sliyaniya Kak pravilo polnyj cikl raboty s vetvyami vklyuchaet sleduyushie etapy sozdanie vetvi svn copy pereklyuchenie imeyushejsya rabochej kopii na vetv svn switch ili sozdanie novoj rabochej kopii putyom zakachki svn checkout izmenenie fajlov i katalogov v rabochej kopii fiksaciya etih izmenenij svn commit kopirovanie v vetv svezhih izmenenij iz roditelskoj vetvi sdelannyh posle vetvleniya svn merge svn commit kopirovanie izmenenij iz vetvi v roditelskuyu vetv svn merge svn commit udalenie vetvi svn delete esli eyo zhiznennyj cikl zakonchen Sliyanie Kopirovanie izmenenij mezhdu vetvyami Sliyanie v Subversion eto primenenie k vetvi nabora izmenenij sdelannyh na drugoj ili toj zhe samoj vetvi Dlya osushestvleniya sliyaniya neobhodimo ispolzovat komandu svn merge ona primenyaet nabor izmenenij k rabochej kopii zatem nuzhno zafiksirovat vnesyonnye izmeneniya svn commit Terminologiya svyazannaya so sliyaniem neskolko zaputana Termin sliyanie angl merge yavlyaetsya ne sovsem tochnym poskolku kak takovogo obedineniya vetvej ne proishodit Krome togo ne sleduet otozhdestvlyat sliyanie i komandu svn merge vo pervyh dlya sliyaniya nuzhno vypolnit pomimo svn merge razreshenie konfliktov i fiksaciyu vo vtoryh primenenie svn merge ne ogranichivaetsya sliyaniem Drugie primeneniya komandy svn merge Komandu svn merge mozhno ispolzovat ne tolko dlya sliyaniya Fakticheski komanda proizvodit vnesenie v rabochuyu kopiyu izmenenij ravnyh raznice mezhdu dvumya katalogami ili fajlami v hranilishe poetomu svn merge yavlyaetsya universalnym sredstvom dlya perenosa izmenenij Mozhno privesti takie primery ispolzovaniya komandy svn merge otkat uzhe zafiksirovannyh izmenenij v tom chisle celogo diapazona revizij udobnyj prosmotr v vide izmenenij v rabochej kopii raznicy mezhdu dvumya sostoyaniyami repozitoriya Sozdanie hranilisha Dlya sozdaniya hranilisha ispolzuetsya komanda svnadmin create Eta operaciya sozdast pustoe hranilishe v ukazannom kataloge Subversion i CVSSravnenie Nizhe privedeno sravnenie parametrov sistem Subversion i CVS tak kak Subversion pozicioniruetsya imenno kak uluchshenie CVS Privedeno sravnenie tolko po tem parametram po kotorym eti sistemy razlichayutsya V celom Subversion prevoshodit CVS po vsem parametram krome podderzhki metok v obsheprinyatom smysle to est metok adresuyushih obekty fajlovoj sistemy Parametr Subversion CVSVozmozhnostiKatalogi Otslezhivaet versii ne tolko fajlov no i katalogov Versii katalogov ne otslezhivayutsya to est struktura katalogov odna i ta zhe ta kotoraya sushestvuet v hranilishe na dannyj moment dlya vseh revizij i vseh vetok Esli izmenit strukturu katalogov to pri izvlechenii staryh sostoyanij poluchaem pravilnye starye revizii fajlov no v nepravilnoj sushestvuyushej na moment izvlecheniya strukture katalogov Tranzakcii Atomarnost mnogofajlovyh fiksacij Atomarnost tolko na urovne odnofajlovyh fiksacij Fakticheski fiksaciya izmenenij v neskolkih fajlah razbivaetsya na posledovatelnost fiksacij izmenenij otdelnyh fajlov Esli takaya posledovatelnost fiksacij prervana to chast fajlov ostayotsya zafiksirovannoj chast ne zafiksirovannoj Nabory izmenenij Nabory izmenenij angl changeset podderzhivayutsya Nabory izmenenij ne podderzhivayutsya Modifikacii imyon fajlov Podderzhivaet kopirovanie peremeshenie i pereimenovanie fajlov i katalogov bez poteri istorii izmenenij Pri kopirovanii peremeshenii i pereimenovanii fajlov fajl s novym imenem ne imeet nikakoj istorii to est svyaz so starym imenem i ego istoriej versij polnostyu teryaetsya To zhe samoe dlya fajlov vnutri kataloga pri modifikacii ego imeni Svojstva properties S kazhdym fajlom i katalogom mozhet byt svyazan proizvolnyj nabor svojstv sostoyashih iz nazvaniya i znacheniya Svojstva tozhe nahodyatsya pod upravleniem versiyami Svojstva ne podderzhivayutsya Blokirovki Podderzhivaetsya neobyazatelnaya blokirovka fajlov nachinaya s versii 1 2 Blokirovki ne podderzhivayutsya no est pohozhij mehanizm nazyvaemyj slezhenie Vetvi Vetvi branch sm slovar realizovany v prostranstve putej Eto znachit chto dlya sozdaniya vetvi proizvoditsya kopirovanie kataloga kopiya i budet vetvyu Sozdanie takih kopij bystraya i ne resursoyomkaya operaciya potomu chto dannye ne dubliruyutsya vmesto etogo fiksiruetsya novaya versiya otlichayushayasya ot predydushej lish raspolozheniem fajlov Vetvi realizovany v tretem izmerenii Eto znachit chto fajl na vetvi adresuetsya tremya parametrami putyom v fajlovoj sisteme reviziej ili drugim sposobom ukazaniya revizii naprimer vremenem imenem vetvi Metki Net metok tag sm slovar kak takovyh Vmesto nih ispolzuetsya ierarhiya katalogov dlya metki sozdayotsya otdelnyj katalog kak i dlya vetvi Metka eto vetv v kotoroj po dogovoryonnosti bolshe ne delayut izmenenij Metka yavlyaetsya kopiej pomechennogo sostoyaniya fajlov i katalogov Metki podderzhivayutsya Metka adresuet pomechennoe sostoyanie fajlov EffektivnostKlient servernyj obmen Pri lyubyh obnovleniyah versij mezhdu klientom i serverom peredayutsya tolko razlichiya mezhdu fajlami chto mozhet sushestvenno umenshit setevoj trafik S servera k klientu peredayutsya razlichiya s klienta na server obekt peredayotsya polnostyu Dvoichnye fajly Odinakovo effektivno rabotaet kak s tekstovymi tak i s dvoichnymi fajlami Rabota s dvoichnymi fajlami menee effektivna kazhdaya novaya versiya sohranyaetsya v hranilishe polnostyu Sozdanie vetvej i metok Trebuetsya nebolshoe fiksirovannoe kolichestvo vremeni i diskovogo prostranstva Zatraty vremeni veliki zavisyat ot kolichestva zadejstvovannyh fajlov Imena vetvej i metok hranyatsya izbytochno vo vseh zadejstvovannyh fajlah Nakladnye rashody v rabochej kopii V sluzhebnyh katalogah rabochej kopii hranitsya chistaya kopiya Poetomu operacii prosmotra i otkata lokalnyh izmenenij vypolnyayutsya bystro bez obrasheniya k hranilishu odnako razmer rabochej kopii na diske primerno v dva raza bolshe chem razmer samih dannyh Chistaya kopiya ne hranitsya razmer rabochej kopii primerno raven razmeru dannyh Vsledstvie etogo operacii prosmotra i otkata lokalnyh izmenenij trebuyut dostupa k hranilishu i vypolnyayutsya medlenno Rashod pamyati na servere Menshe Bolshe Vnutrennyaya strukturaUrovni Subversion sproektirovan kak nabor bibliotek razdelyonnyh na neskolko urovnej Kazhdyj iz nih vypolnyaet konkretnuyu zadachu i pozvolyaet razrabotchikam sozdavat svoi sobstvennye instrumenty v zavisimosti ot slozhnosti i zadachi Fs Samyj nizkij uroven realizuet versionirovannuyu fajlovuyu sistemu kotoraya i hranit dannye Repos Uroven hranilisha realizovannogo na fajlovoj sisteme Na etom urovne realizovano mnozhestvo vspomogatelnyh funkcij a takzhe podderzhivaetsya zapusk obrabotchikov angl hooks to est skriptov kotorye zapuskayutsya pri nastuplenii nekotorogo sobytiya Vmeste urovni Fs i Repos sostavlyayut interfejs fajlovoj sistemy mod dav svn Obespechivaet WebDAV dostup cherez Apache 2 Ra Realizuet dostup k hranilishu i lokalnyj i udalyonnyj Nachinaya s etogo urovnya na hranilishe mozhno ssylatsya po URL to estfile path dlya lokalnogo dostupa http host path ili https host path dlya dostupa cherez WebDAV ili svn host path ili svn a rel nofollow class external free href ssh host path ssh host path a dlya dostupa cherez protokol SVN Client Wc Samyj vysokij uroven Abstragiruet dostup k hranilishu i obespechivaet vypolnenie tipichnyh zadach klienta takih kak autentifikaciya polzovatelya ili sravnenie versij Client ispolzuet biblioteku Wc dlya upravleniya lokalnoj rabochej kopiej Konfiguraciya klienta Standartnaya klientskaya utilita Subversion SVN konfiguriruetsya peremennymi okruzheniya i INI fajlami sozdavaemymi v domashnem kataloge polzovatelya v podkataloge subversion raspolozhenie konfiguracii v Windows sistemah v fajlah ili reestre zavisit ot sistemnyh nastroek V konfiguracii SVN takzhe keshiruet SSL sertifikaty loginy paroli i t p esli eto ne zapresheno v konfiguracii dlya dostupa k serveram Subversion Soderzhimoe kataloga subversion fajl servers soderzhit informaciyu o sposobah setevogo podklyucheniya k udalyonnomu repozitoriyu fajl config soderzhit prochuyu konfiguracionnuyu informaciyu katalog auth soderzhit kesh serverov sertifikatov loginov i parolej fajl README txt dokumentaciya po konfigurirovaniyu SVNNedostatkiProblemy pri pereimenovanii fajlov Subversion ne vsegda mozhet pravilno obrabotat operacii pereimenovaniya fajlov esli odnovremenno s pereimenovaniem izmenyaetsya i soderzhimoe fajla Problemy mogut takzhe vozniknut esli fajl pereimenovannyj v lokalnoj kopii kto to drugoj izmenil v hranilishe Chast etih problem ispravlena v versii 1 5 odnako eto reshenie poka ne polnoe Slabaya podderzhka sliyaniya vetvej Takzhe slabym mestom Subversion schitayut operacii sliyaniya vetok Do versii 1 5 vse takie operacii polzovatelyam prihodilos otslezhivat vruchnuyu s pomoshyu podrobnyh zapisej v zhurnale izmenenij Nachinaya s versii 1 5 poyavilas bazovaya podderzhka avtomaticheskogo otslezhivaniya sliyanij kotoruyu razrabotchiki planiruyut uluchshit v posleduyushih relizah V nastoyashee vremya Subversion dostatochno horosho podderzhivaet tipovye scenarii sliyaniya v bolee slozhnyh sluchayah vozmozhny problemy Rekomenduetsya organizovat rabochij process tak chtoby izbezhat problemnyh scenariev Sliyanie pereimenovannyh fajlov i katalogov ne podderzhivaetsya Nevozmozhnost udaleniya dannyh iz hranilisha Informaciya odnazhdy pomeshyonnaya v hranilishe Subversion ostayotsya tam navsegda fajl mozhno udalit v tekushej revizii no vsegda est vozmozhnost poluchit iz hranilisha odnu iz predydushih revizij v kotoryh fajl sushestvoval Hotya sohrannost proshlyh revizij i yavlyaetsya sobstvenno celyu ispolzovaniya sistem upravleniya versiyami inogda byvaet neobhodimo polnostyu udalit iz hranilisha informaciyu popavshuyu tuda po oshibke V Subversion ne predusmotreno dlya etogo nikakogo shtatnogo sposoba edinstvennaya vozmozhnost zaklyuchaetsya v sozdanii dampa hranilisha ego obrabotke shtatnoj utilitoj svndumpfilter i posleduyushem vosstanovlenii hranilisha iz dampa Sushestvuyut takzhe storonnie programmy dlya avtomatizacii etogo processa no v lyubom sluchae dlya vypolneniya etoj operacii trebuetsya vremennoe prekrashenie dostupa k hranilishu i vmeshatelstvo administratora s privilegiyami dostatochno vysokimi dlya togo chtoby polnostyu steret staroe hranilishe i zamenit ego novym Dopolnitelnoe programmnoe obespechenieKlienty RapidSVN kross platformennyj klient Subversion na C kross platformennyj klient Subversion na Java TortoiseSVN klient Subversion realizovannyj kak rasshirenie dlya provodnika Windows klient Subversion realizovannyj kak rasshirenie dlya fajlovogo menedzhera v Linux ranee nazyvalsya NautilusSVN graficheskij klient Subversion v sostave nabora prilozhenij KDE Software Compilation rasshirenie dlya Microsoft Visual Studio Plaginy AnkhSVN plagin dlya Microsoft Visual Studio plagin dlya Microsoft Visual Studio plagin dlya Microsoft SCC plagin dlya Eclipse plagin dlya Eclipse plagin dlya Microsoft Office Veb interfejsy Trac instrument osnovannyj na tehnologii Wiki Redmine dopolnitelno otslezhivaet oshibki USVN utilita dlya sozdaniya i upravleniya dostupom k repozitoriyam specializirovana pod SVN SVNManager PHP utilita dlya upravleniya repozitoriyami sozdanie udalenie zagruzka i vygruzka upravlenie polzovatelyami i gruppami utilita dlya upravleniya repozitoriyami i polzovatelyami vklyuchaya upravlenie kontrolem dostupa k otdelnym katalogam v repozitorii kross platformennyj klient Subversion na C Sravnitelnaya tablica veb interfejsy Naimenovanie Opisanie Yazyk BD Licenziya Sajt Obnovlenie VersiyaTrac instrument osnovannyj na tehnologii Wiki Python SQLite PostgreSQL MySQL i MariaDB Modificirovannaya licenziya BSD trac edgewall org Arhivnaya kopiya ot 8 aprelya 2013 na Wayback Machine 21 06 2017 1 2 2Redmine dopolnitelno otslezhivaet oshibki Ruby MySQL PostgreSQL SQLite Oracle GNU General Public License redmine org Arhivnaya kopiya ot 27 aprelya 2011 na Wayback Machine 09 12 2018 4 0 0USVN utilita dlya sozdaniya i upravleniya dostupom k repozitoriyam specializirovana pod SVN PHP MySQL SQLlite CeCill GPL sovmestimaya licenziya www usvn info Arhivnaya kopiya ot 12 maya 2011 na Wayback Machine 13 01 2012 1 0 6bez upravleniya polzovatelyami ne trebuet podderzhki DAV web serverom Python MySQL Two clause Berkeley style www viewvc org Arhivnaya kopiya ot 4 maya 2011 na Wayback Machine 02 12 2010 1 1 8interfejs prosmotra k SVN PHP XML GNU GPL websvn tigris org Arhivnaya kopiya ot 12 iyunya 2006 na Wayback Machine 12 10 2010 2 3 2SVNManager utilita dlya upravleniya repozitoriyami sozdanie udalenie zagruzka i vygruzka upravlenie polzovatelyami i gruppami PHP MySQL or SQLite svnmanager sourceforge net Arhivnaya kopiya ot 30 aprelya 2011 na Wayback Machine 28 01 2012 1 09 MIT utilita dlya upravleniya repozitoriyami i polzovatelyami vklyuchaya upravlenie kontrolem dostupa k otdelnym katalogam v repozitorii Python MIT X Arhivnaya kopiya ot 6 iyunya 2011 na Wayback Machine 24 12 2012 2 1web interfejs prosmotra Subversion repozitoriev C RADIX 1 0 csvn radix pro Arhivnaya kopiya ot 16 marta 2022 na Wayback Machine 17 11 2020 0 1 3Primechaniyahttps subversion apache org docs release notes release history html Sahlberg D Apache Subversion 1 14 5 released angl 2024 The subversion Open Source Project on Open Hub Languages Page 2006 https projects apache org json projects subversion json Free Software Directory http subversion tigris org license 1 html Anglijskoe slovo subversion mozhno perevesti dvoyako kak sverzhenie subversion i kak podversiya sub version Po nazvaniyu programmy klienta dlya komandnoj stroki vhodyashej v sostav paketa Apache Trademark Listing neopr Data obrasheniya 10 oktyabrya 2015 Arhivirovano 7 oktyabrya 2015 goda Subversion Features Arhivnaya kopiya ot 8 aprelya 2011 na Wayback Machine angl The Risks of Distributed Version Control Arhivnaya kopiya ot 15 iyulya 2011 na Wayback Machine Ben Kollinz Sassman angl CVS is out Subversion is in Arhivirovano 25 marta 2010 goda angl Red Hat magazine avgust 2005 g CVS sourceforge Arhivirovano 10 iyunya 2010 goda CVS sistema upravleniya versiyami neopr Data obrasheniya 30 iyunya 2010 Arhivirovano 8 iyulya 2010 goda HEADS UP FreeBSD src repo transitioning to git this weekend angl lists freebsd org 17 dekabrya 2020 Data obrasheniya 22 dekabrya 2020 Arhivirovano 18 dekabrya 2020 goda The Forrester Wave Software Change and Configuration Management Q2 2007 neopr Forrester Research Arhivirovano iz originala 25 avgusta 2011 goda Popularity contest statistics for bzr git git core mercurial subversion neopr Data obrasheniya 24 iyunya 2010 Arhivirovano 6 aprelya 2014 goda Arhivirovannaya kopiya neopr Data obrasheniya 24 iyunya 2010 Arhivirovano 17 iyulya 2011 goda sm http subversion apache org docs Arhivnaya kopiya ot 17 iyunya 2010 na Wayback Machine angl Ben Collins Sussman Brian W Fitzpatrick amp C Michael Pilato Version Control with Subversion angl Data obrasheniya 27 noyabrya 2019 Arhivirovano 8 avgusta 2010 goda Ben Kollinz Sassman Brajan U Fitcpatrik K Majkl Pilato Upravlenie versiyami v Subversion neopr Data obrasheniya 27 noyabrya 2019 Arhivirovano 18 noyabrya 2019 goda Ben Kollinz Sassman Brajan U Ficpatrik K Majkl Pilato Istoriya Subversion Upravlenie versiyami v Subversion rus 2007 Dlya Subversion 1 4 Data obrasheniya 21 iyulya 2010 Arhivirovano iz originala 25 avgusta 2011 goda Spisok izmenenij Arhivnaya kopiya ot 18 iyunya 2010 na Wayback Machine angl Goliath Business News Arhivirovano 5 dekabrya 2008 goda Subversion 1 1 Release Notes neopr Data obrasheniya 18 iyunya 2010 Arhivirovano 17 iyunya 2010 goda Subversion 1 2 Release Notes neopr Data obrasheniya 18 iyunya 2010 Arhivirovano 17 iyunya 2010 goda Subversion 1 3 Release Notes neopr Data obrasheniya 19 iyunya 2010 Arhivirovano 17 iyunya 2010 goda Subversion 1 4 Release Notes neopr Data obrasheniya 18 iyunya 2010 Arhivirovano 17 iyunya 2010 goda Subversion 1 5 Release Notes neopr Data obrasheniya 18 iyunya 2010 Arhivirovano 2 iyulya 2016 goda Subversion 1 6 Release Notes neopr Data obrasheniya 18 iyunya 2010 Arhivirovano 17 iyunya 2010 goda Subversion perevedena pod kontrol Apache Software Foundation Arhivnaya kopiya ot 23 fevralya 2010 na Wayback Machine nixp ru Subversion amp the Move to the Apache Software Foundation nedostupnaya ssylka videoobrashenie prezidenta Subversion Corporation Apache Subversion 1 7 Release Notes neopr Data obrasheniya 12 oktyabrya 2011 Arhivirovano 12 oktyabrya 2011 goda Subversion 1 8 Release Notes neopr Data obrasheniya 9 iyulya 2013 Arhivirovano 10 iyulya 2013 goda rabota s simvolnymi ssylkami podderzhivaetsya tolko v rabochih kopiyah pod UNIX sistemami Vetvi i metki v Subversion ne yavlyayutsya nezavisimym izmereniem hranilisha Sm The Key Concepts Behind Branching Arhivnaya kopiya ot 5 oktyabrya 2015 na Wayback Machine Terminy hranilishe i repozitorij yavlyayutsya sinonimami Glava 5 Administrirovanie hranilisha Arhivnaya kopiya ot 9 noyabrya 2017 na Wayback Machine v knige Upravlenie versiyami v Subversion Zdes perechisleny operacii imenno s tochki zreniya fajlovoj sistemy hranilisha V rabochej kopii dejstviya nad obektami neskolko inye Odnako izmeneniya v rabochej kopii buduchi zafiksirovannymi vyzovut v hranilishe opisannye zdes dejstviya Naprimer komanda svn move v rabochej kopii proizvedyot operacii D A v hranilishe Struktura proektov na C s ispolzovaniem Subversion i Mxx ru Arhivnaya kopiya ot 19 fevralya 2008 na Wayback Machine Hranenie slozhnyh proektov v repozitorii i ustanovka tag ov na neskolko proektov srazu Arhivnaya kopiya ot 4 avgusta 2008 na Wayback Machine Inter File Branching in Perforce Arhivirovano 14 iyulya 2007 goda Path Based Authorization neopr Data obrasheniya 27 maya 2008 Arhivirovano 7 oktyabrya 2008 goda Tipovye primery Arhivnaya kopiya ot 3 dekabrya 2008 na Wayback Machine razdel v knige Upravlenie versiyami v Subversion versiya 1 4 Bubble Up Method Arhivnaya kopiya ot 17 iyunya 2010 na Wayback Machine angl V CVS katalog mozhno peremestit pryamo v hranilishe sredstvami fajlovoj sistemy pri etom fajly v nyom ne poteryayut istoriyu Odnako eta modifikaciya podejstvuet na vse revizii i vetvi fajlov v etogo kataloga poskolku v CVS katalogi voobshe ne imeyut versionnoj informacii Subversion FAQ neopr Data obrasheniya 14 aprelya 2010 Arhivirovano 15 aprelya 2010 goda Runtime Configuration Area Customizing Your Subversion Experience neopr Data obrasheniya 16 sentyabrya 2010 Arhivirovano iz originala 25 avgusta 2011 goda Copy move related improvements in Subversion 1 5 neopr Data obrasheniya 24 iyunya 2008 Arhivirovano 24 iyunya 2008 goda Merge tracking foundational neopr Data obrasheniya 24 iyunya 2008 Arhivirovano 24 iyunya 2008 goda Subversion merge reintegrate Arhivnaya kopiya ot 31 avgusta 2009 na Wayback Machine angl svn obliterate neopr Data obrasheniya 21 iyulya 2008 Arhivirovano 22 noyabrya 2002 goda SsylkiSubversion Mediafajly na VikiskladePortal Svobodnoe programmnoe obespechenie Oficialnaya kniga po Subversion russkij yazyk Arhivnaya kopiya ot 1 avgusta 2013 na Wayback Machine Ben Kollinz Sassman Brajan U Ficpatrik K Majkl Pilato Upravlenie versiyami v Subversion Arhivnaya kopiya ot 19 dekabrya 2008 na Wayback Machine Stati Arhivnaya kopiya ot 2 iyunya 2008 na Wayback Machine na CollabNet Subversion Community angl John Ferguson Smart Merging and branching in Subversion 1 5 Arhivnaya kopiya ot 26 maya 2008 na Wayback Machine angl Version Control and the 80 Arhivnaya kopiya ot 8 iyunya 2008 na Wayback Machine angl Ben Kollinz Sassman o budushem Subversion i o raspredelyonnyh sistemah Russkij perevod stati Arhivnaya kopiya ot 7 aprelya 2014 na Wayback Machine Statya Bez dizajna ikonok Repozitorij Subversion na svoyom kompyutere Arhivnaya kopiya ot 14 marta 2009 na Wayback MachineEta statya vhodit v chislo horoshih statej russkoyazychnogo razdela Vikipedii