Apache Subversion

редактировать
Бесплатная версия программного обеспечения с открытым исходным кодом и система контроля версий
Apache Subversion
Subversion Logo.svg
Автор (ы) оригинала CollabNet
Разработчик (и) Apache Software Foundation
Первоначальный выпуск20 октября 2000 г.; 19 лет назад (2000-10-20)
Стабильный выпуск
1.9.x1.9.12 / 25 июля 2019 г.; 14 месяцев назад (2019-07-25)
1.10.x1.10.6 / 25 июля 2019 г.; 14 месяцев назад (2019-07-25)
1.12.x1.12.2 / 25 июля 2019 г.; 14 месяцев назад (2019-07-25)
1.13.x1.13.0 / 30 октября 2019 г.; 11 месяцев назад (2019-10-30)
1.14.x1.14.0 / 27 мая 2020 г.; 4 месяца назад (2020-05-27)
Репозиторий Измените это в Викиданных
Написано наC
Операционная система Кросс-платформенная
Тип Контроль версий
Лицензия Лицензия Apache 2.0
Веб-сайтSubversion.apache.org Измените это в Викиданных

Apache Subversion (часто сокращенно SVN, после имени команды svn) - это система управления версиями программного обеспечения и контроля версий, распространяемая как с открытым исходным кодом под лицензией Apache. Разработчики программного обеспечения используют Subversion для поддержки текущих и исторических версий файлов, таких как исходный код, веб-страницы и документация. Его цель - стать в основном совместимым преемником широко используемой системы Concurrent Versions System (CVS).

Сообщество с открытым исходным кодом широко использовало Subversion: например, в таких проектах, как Apache Software Foundation, Free Pascal, FreeBSD, SourceForge, а с 2006 по 2019 год - GCC. CodePlex ранее был обычным хостом для репозиториев Subversion.

Subversion была создана CollabNet Inc. в 2000 году, и сейчас это проект Apache верхнего уровня, который создается и используется глобальным сообществом участников.

Содержание
  • 1 История
  • 2 Возможности
    • 2.1 Типы репозиториев
      • 2.1.1 Berkeley DB (устарело)
      • 2.1.2 FSFS
      • 2.1.3 FSX
    • 2.2 Репозиторий доступ
  • 3 уровня
  • 4 Файловая система
  • 5 Свойства
  • 6 Ветвление и теги
  • 7 Ограничения и проблемы
    • 7.1 Теги и ветки Subversion
  • 8 Разработка и внедрение
  • 9 См. также
  • 10 Ссылки
    • 10.1 Цитаты
    • 10.2 Источники
  • 11 Дополнительная литература
  • 12 Внешние ссылки
История

CollabNet основал проект Subversion в 2000 году как попытку написать система контроля версий с открытым исходным кодом, которая работала так же, как CVS, но исправляла ошибки и предоставляла некоторые функции, отсутствующие в CVS. К 2001 году Subversion достаточно продвинулась, чтобы на разместить свой собственный исходный код, и в феврале 2004 года была выпущена версия 1.0. В ноябре 2009 года Subversion была принята в Apache Incubator : это положило начало процессу становления стандартного проекта Apache верхнего уровня. 17 февраля 2010 г. он стал проектом Apache верхнего уровня.

ВерсияИсходная дата выпускаПоследняя версияДата выпускаСтатус
Старая версия, больше не поддерживается: 1.02004-02-231.0.92004-10-13Больше не поддерживается
Старая версия, больше не поддерживается: 1.12004-09-291.1.42005-04-01Нет больше не поддерживается
Старая версия, больше не поддерживается: 1.22005-05-211.2.32005-08-19Больше не поддерживается
Старая версия, больше не поддерживается: 1.32005-12-301.3.223.05.2006Больше не поддерживается
Старая версия, больше не поддерживается: 1.42006-09-101.4.62007-12-21Больше не поддерживается
Старая версия, больше не поддерживается: 1.52008-06-191.5.906.12.2010Больше не поддерживается
Старая версия, больше не поддерживается: 1.62009-03-201.6.232013-05-30Больше не поддерживается
Старая версия, больше не поддерживается: 1.72011-10-111.7.222015-08-12Больше не поддерживается
Старая версия, больше не поддерживается: 1.82013-06-181.8.1910.08.2017Больше не поддерживается
Старая версия, больше не поддерживается : 1.92015-08-051.9.122019-07-24Больше не поддерживается
Старая версия, но все еще поддерживается: 1.102018-04-131.10.62019-07-24Частично поддерживается
Старая версия, больше не поддерживается: 1.112018-10-301.11.12019-01-11Больше не поддерживается
Старая версия, нет больше не поддерживается: 1.122019-04-241.12.22019-07-24Больше не поддерживается
Старая версия, больше не поддерживается: 1.132019-10-301.13.02019-10-30Нет более длительная поддержка
Текущая стабильная версия: 1.142020-05-271.14.02020-05-27Полностью поддерживается, LTS
Обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск

Даты выпуска извлечены из Apache Файл CHANGESSubversion, в котором записана вся история выпусков.

Возможности
  • Фиксирует как истинные атомарные операции (прерванные операции фиксации в CVS могут вызвать несогласованность или повреждение репозитория).
  • Переименовано / скопировано / перемещено / удаленные файлы сохраняют полную историю изменений.
  • Система поддерживает управление версиями для каталогов, переименований и файлов метаданных (но не для меток времени). Пользователи могут перемещать и / или копировать целые деревья каталогов очень быстро, сохраняя при этом полную историю изменений.
  • Управление версиями символических ссылок.
  • Встроенная поддержка двоичных файлов с компактным хранилищем двоичных различий.
  • HTTP-сервер Apache в качестве сетевого сервера, WebDAV / Delta-V для протокола. Существует также независимый сервер процесс, называемый svnserve, который использует собственный протокол поверх TCP / IP.
  • Ветвление - это дешевая операция, не зависящая от размера файла (хотя сама Subversion не различает между филиалом и каталогом)
  • Исходно клиент-сервер, многоуровневая библиотека дизайн.
  • Протокол клиент / сервер отправляет diffs в обоих направлениях.
  • Затраты пропорциональны размеру изменения, а не размеру данных.
  • Анализируемый вывод, включая вывод журнала XML
  • с открытым исходным кодом с лицензией - Apache License начиная с версии 1.7; в предыдущих версиях используется производная от Apache Software License 1.1.
  • Интернационализированные программные сообщения.
  • Блокировка файлов для файлов без объединения ("зарезервированные извлечения").
  • Авторизация на основе пути.
  • языковые привязки для C#, PHP, Python, Perl, Ruby и Java.
  • . Полная поддержка MIME - пользователи могут просматривать или изменять тип MIME каждого файла, при этом программное обеспечение знает, какие типы MIME могут отличаться от показанных в предыдущих версиях.
  • Отслеживание слияний - слияние между ветвями будет отслеживаться, это позволяет автоматически объединять ветки, не сообщая Subversion, что нужно, а что не нужно объединять.
  • Changelists для организации коммитов в группы фиксации.

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

Subversion предлагает два типа хранилища репозитория.

Berkeley DB (не рекомендуется)

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

FSFS

В 2004 году была разработана новая подсистема хранения данных, получившая название FSFS. Он работает быстрее, чем серверная часть Berkeley DB, в каталогах с большим количеством файлов и занимает меньше места на диске из-за меньшего количества журналов.

Начиная с Subversion 1.2, FSFS стала хранилищем данных по умолчанию для новых репозиториев.

Этимология «FSFS» основана на использовании Subversion термина «файловая система» для своей системы хранения репозитория. FSFS хранит свое содержимое непосредственно в файловой системе операционной системы, а не в структурированной системе, такой как Berkeley DB. Таким образом, это «файловая система [Subversion] поверх файловой системы».

FSX

Новая файловая система, названная FSX, находится в стадии разработки, чтобы снять некоторые ограничения FSFS. Начиная с версии 1.9, он не считался готовым к производству.

Доступ к репозиториям

Доступ к репозиториям Subversion может осуществляться:

  1. локальной файловой системой или сетевой файловой системой, доступ к которой осуществляется напрямую клиентом. В этом режиме используется схема доступа file: /// path.
  2. WebDAV / Delta-V (через http или https) с использованием модуля mod_dav_svn для Apache 2. В этом режиме используется схема доступа http: // host / path или https: // host / path для безопасных соединений с использованием ssl.
  3. Пользовательский протокол «svn» (по умолчанию порт 3690), используя обычный текст или TCP / IP. В этом режиме используется либо схема доступа svn: // host / path для незашифрованного транспорта, либо схема svn + ssh: // host / path для туннелирования через ssh.

Все три средства могут обращаться как к FSFS, так и Репозитории Berkeley DB.

Любая версия клиента 1.x может работать с любым сервером 1.x. Новые клиенты и серверы имеют дополнительные функции и возможности производительности, но имеют резервную поддержку для старых клиентов / серверов.

Уровни

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

Fs
Самый низкий уровень; он реализует версионную файловую систему, в которой хранятся пользовательские данные.
Repos
Имеет отношение к репозиторию, созданному вокруг файловой системы. Он имеет множество вспомогательных функций и обрабатывает различные «ловушки», которые может иметь репозиторий, например, скрипты, которые запускаются при выполнении действия. Вместе Fs и Repos составляют «интерфейс файловой системы».
mod_dav_svn
Обеспечивает доступ WebDAV / Delta-V через Apache 2.
Ra
Управляет «доступом к репозиторию», как локальные, так и удаленные. С этого момента для обращения к репозиториям используются URL-адреса, например
  • file: /// path / для локального доступа,
  • http: // host / path / или https: // host / path / для доступа WebDAV, или
  • svn: // host / path / или svn + ssh: // host / path / для протокола SVN.
Client, Wc
Самый высокий уровень. Он абстрагирует доступ к репозиторию и предоставляет общие клиентские задачи, такие как аутентификация пользователей или сравнение версий. Клиенты Subversion используют библиотеку Wc для управления локальной рабочей копией.
Файловая система
Svn 3D-tree.svg

Файловую систему Subversion можно рассматривать как "двумерную". Для однозначной адресации элементов файловой системы используются две координаты:

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

Файловая система Subversion использует транзакции для сохранения изменений атомарно. Транзакция работает с указанной версией файловой системы, не обязательно самой последней. У транзакции есть собственный корень, в который вносятся изменения. Затем он либо фиксируется и становится последней ревизией, либо прерывается. Транзакция на самом деле является долгоживущим объектом файловой системы; клиенту не нужно фиксировать или прерывать транзакцию, он может также начать транзакцию, выйти, а затем повторно открыть транзакцию и продолжить ее использование. Потенциально несколько клиентов могут получить доступ к одной и той же транзакции и вместе работать над атомарным изменением, хотя ни один из существующих клиентов не предоставляет эту возможность.

Свойства

Одна важная особенность файловой системы Subversion - это свойства: простые пары текстовое имя = значение. Большинство свойств встречается в записях файловой системы (т. Е. Файлах и каталогах). Они версируются так же, как и другие изменения файловой системы. Клиент Subversion резервирует префикс svn: для встроенных свойств, но для определения настраиваемых свойств можно использовать другие имена.

svn:executable
Делает файл на Unix -хостированных рабочих копиях исполняемым, если поддерживается файловой системой.
svn: mime-type
Хранит Тип Интернет-носителя ("MIME-тип") файла. Влияет на обработку различий и слияния.
svn: ignore
Список шаблонов имен файлов для игнорирования в каталоге. Аналогично файлу CVS .cvsignore.
svn:keywords
Список ключевых слов, которые нужно подставить в файл при внесении изменений. Сам файл также должен ссылаться на ключевые слова как $ keyword $ или $ keyword:... $. Это используется для сохранения определенной информации (например, автора, даты последнего изменения, номера редакции) в файле без вмешательства человека.. Механизм подстановки ключевых слов исходит из RCS и из CVS.
svn: eol-style
Заставляет клиента преобразовывать символы конца строки в текстовых файлах. Используется, когда требуется рабочая копия с определенным стилем EOL. Обычно используется "native", так что EOL соответствуют стилю EOL операционной системы пользователя. Репозитории могут требовать это свойство для всех файлов, чтобы предотвратить несовместимые окончания строк, которые могут вызвать проблемы сами по себе.
svn: externals
Позволяет автоматически извлекать части других репозиториев в подкаталог.
svn: needs-lock
Указывает, что файл должен быть извлечен с правами доступа только для чтения. Он предназначен для использования с запорным механизмом. Разрешение только для чтения напоминает о необходимости получить блокировку перед изменением файла: получение блокировки делает файл доступным для записи, а снятие блокировки снова делает его доступным только для чтения. Блокировки применяются только во время операции фиксации. Блокировки можно использовать без установки этого свойства. Однако это не рекомендуется, потому что это создает риск того, что кто-то изменит заблокированный файл; они обнаружат, что он заблокирован, только когда их фиксация не удалась.
svn: special
Это свойство не предназначено для установки или изменения непосредственно пользователями. С 2010 года он используется только для наличия символических ссылок в репозитории. Когда в репозиторий добавляется символическая ссылка, создается файл, содержащий цель ссылки, с этим набором свойств. Когда Unix-подобная система извлекает этот файл, клиент преобразует его в символическую ссылку.
svn: mergeinfo
Используется для отслеживания данных слияния (номеров версий) в Subversion 1.5 (или новее). Это свойство автоматически поддерживается командой merge, и не рекомендуется изменять его значение вручную.

Subversion также использует свойства для самих ревизий. Как и указанные выше свойства в записях файловой системы, имена полностью произвольны, при этом клиент Subversion использует определенные свойства с префиксом svn :. Однако эти свойства не версируются, и они могут быть изменены позже, если это разрешено обработчиком pre-revprop-change.

svn: date
Отметка даты и времени редакции.
svn : author
Имя пользователя, представившего изменение (я).
svn: log
Пользовательское описание изменения (я).
Ветвление и тегирование

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

Новая ветвь или тег настраивается с помощью команды «svn copy», которая должна использоваться вместо собственного механизма операционной системы. Скопированный каталог связан с оригиналом в репозитории, чтобы сохранить его историю, и копия занимает очень мало дополнительного места в репозитории.

Все версии в каждой ветке поддерживают историю файла до момента копирования, а также любые изменения, сделанные с тех пор. Можно «объединить» изменения обратно в ствол или между ветвями.

Визуализация простого проекта Subversion
Ограничения и проблемы

Известная проблема в Subversion влияет на реализацию операции переименования файлов и каталогов. По состоянию на 2014 год Subversion реализует переименование файлов и каталогов как «копию» нового имени с последующим «удалением» старого имени. Меняются только имена, все данные, относящиеся к истории редактирования, остаются прежними, и Subversion по-прежнему будет использовать старое имя в более старых версиях «дерева». Однако Subversion может запутаться, когда ход вступает в конфликт с правками, сделанными где-то еще, как при обычных фиксациях, так и при слиянии ветвей. В выпуске Subversion 1.5 были рассмотрены некоторые из этих сценариев, в то время как другие остались проблемными. Выпуск Subversion 1.8 решил некоторые из этих проблем, сделав перемещения первоклассной операцией на клиенте, но она по-прежнему рассматривается как копирование + удаление в репозитории.

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

Subversion хранит дополнительные копии данных на локальном компьютере, что может стать проблемой для очень больших проектов или файлов, или если разработчики работают над несколькими ветвями одновременно. В версиях до 1.7 эти каталоги .svnна стороне клиента могли быть повреждены опрометчивыми действиями пользователя, такими как операции глобального поиска / замены. Начиная с версии 1.7 Subversion использует единую централизованную папку.svn для каждой рабочей области.

Subversion не сохраняет время модификации файлов. Таким образом, файл, извлеченный из репозитория Subversion, будет иметь «текущую» дату (вместо времени модификации в репозитории), а файл, зарегистрированный в репозитории, будет иметь дату извлечения (вместо времени модификации время регистрации файла). Это не всегда то, что нужно. Чтобы смягчить это, существуют сторонние инструменты, которые позволяют сохранить время модификации и другие метаданные файловой системы. Однако также важно присвоить извлеченным файлам текущую дату - именно так инструменты, подобные make (1), будут замечать измененный файл для его восстановления.

Subversion использует централизованную модель контроля версий. Бен Коллинз-Сассман, один из разработчиков Subversion, считает, что централизованная модель поможет предотвратить сокрытие работы «незащищенных программистов» от других членов команды. Некоторые пользователи систем контроля версий считают централизованную модель вредной; как известно, Линус Торвальдс атаковал модель Subversion и ее разработчиков.

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

Теги Subversion и ветви

Номера редакций трудно запомнить в любой системе контроля версий. По этой причине большинство систем предлагают символические теги в качестве удобных ссылок на них. Subversion не имеет такой возможности, и то, что ее документация рекомендует использовать вместо этого, сильно отличается по своей природе. Вместо реализации тегов как ссылок на точки в истории Subversion рекомендует делать копии моментальных снимков в хорошо известный подкаталог («tags /») в пространстве дерева репозитория. Доступно лишь несколько предопределенных ссылок: HEAD, BASE, PREVи COMMITTED.

Эта проекция из истории в пространство имеет несколько проблем:

  1. Когда делается снимок, система не придает никакого особого значения имени тега / снимка. В этом разница между копией и ссылкой. Редакция записывается, и к моментальному снимку можно получить доступ по URL-адресу. Это делает одни операции менее удобными, а другие - невозможными. Например, наивный svn diff -r tag1: tag2 myfileне работает; это немного сложнее, чем достичь, требуя от пользователя знания и ввода URL / путей к снимкам, а не только имен: svn diff / myfile / myfile. Другие операции, такие как, например, svn log -r tag1: tag2 myfile, просто невозможны.
  2. Когда два (идеально независимых) типа объектов живут в дереве репозитория, "борьба за верх" может последовать. Другими словами, часто бывает сложно решить, на каком уровне создать подкаталог tags /:
    trunk / / component foo / / component bar / теги / /1.1/ / component foo / / component bar /
    или
    component foo / / транк / / теги / /1.1/ компонент бар / / транк / / теги / /1.1/
  3. Теги, по их общепринятому определению, доступны только для чтения и имеют малый вес для репозитория и клиента. Копии Subversion не предназначены только для чтения, и, хотя они невелики для репозитория, они невероятно тяжелы для клиента.

Для решения таких проблем на плакатах в списках рассылки Subversion предлагается новая функция под названием " метки "или" псевдонимы ". Метки SVN будут больше напоминать «теги» других систем, таких как CVS или Git. Тот факт, что Subversion имеет глобальные номера ревизий, открывает путь к очень простой реализации метки → ревизии. Тем не менее, по состоянию на 2013 год не было достигнуто никакого прогресса, и символические теги не входят в список наиболее востребованных функций.

Разработка и внедрение

CollabNet продолжил свое участие в Subversion, но проект работает как независимое сообщество с открытым исходным кодом. В ноябре 2009 года проект был принят в Apache Incubator с целью стать частью усилий Apache Software Foundation. С марта 2010 года проект официально известен как Apache Subversion и является частью проектов верхнего уровня Apache.

В октябре 2009 года WANdisco объявил о найме основных коммиттеров Subversion в качестве Компания стала крупным корпоративным спонсором проекта. В их число входил Хайрам Райт, президент Subversion Corporation и менеджер по выпуску проекта Subversion с начала 2008 года, который присоединился к компании, чтобы возглавить ее команду открытого исходного кода.

Сообщество разработчиков открытого исходного кода Subversion не предоставляет двоичные файлы, но потенциальные пользователи могут скачивать двоичные файлы от добровольцев. Хотя проект Subversion не включает официальный графический пользовательский интерфейс (GUI) для использования с Subversion, третьи стороны разработали ряд различных графических интерфейсов, а также широкий спектр дополнительного вспомогательного программного обеспечения.

Работа, объявленная в 2009 году, включала SubversionJ (Java API ) и реализацию команды Obliterate, аналогичную той, что предоставляется в Perforce. Оба этих усовершенствования спонсировались WANdisco.

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

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки

Цитаты

Источники

Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-06-11 20:11:10
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте