Автор (ы) оригинала | CollabNet | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Разработчик (и) | Apache Software Foundation | ||||||||||
Первоначальный выпуск | 20 октября 2000 г.; 19 лет назад (2000-10-20) | ||||||||||
Стабильный выпуск |
| ||||||||||
Репозиторий | |||||||||||
Написано на | 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 верхнего уровня, который создается и используется глобальным сообществом участников.
CollabNet основал проект Subversion в 2000 году как попытку написать система контроля версий с открытым исходным кодом, которая работала так же, как CVS, но исправляла ошибки и предоставляла некоторые функции, отсутствующие в CVS. К 2001 году Subversion достаточно продвинулась, чтобы на разместить свой собственный исходный код, и в феврале 2004 года была выпущена версия 1.0. В ноябре 2009 года Subversion была принята в Apache Incubator : это положило начало процессу становления стандартного проекта Apache верхнего уровня. 17 февраля 2010 г. он стал проектом Apache верхнего уровня.
Версия | Исходная дата выпуска | Последняя версия | Дата выпуска | Статус |
---|---|---|---|---|
Старая версия, больше не поддерживается: 1.0 | 2004-02-23 | 1.0.9 | 2004-10-13 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.1 | 2004-09-29 | 1.1.4 | 2005-04-01 | Нет больше не поддерживается |
Старая версия, больше не поддерживается: 1.2 | 2005-05-21 | 1.2.3 | 2005-08-19 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.3 | 2005-12-30 | 1.3.2 | 23.05.2006 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.4 | 2006-09-10 | 1.4.6 | 2007-12-21 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.5 | 2008-06-19 | 1.5.9 | 06.12.2010 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.6 | 2009-03-20 | 1.6.23 | 2013-05-30 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.7 | 2011-10-11 | 1.7.22 | 2015-08-12 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.8 | 2013-06-18 | 1.8.19 | 10.08.2017 | Больше не поддерживается |
Старая версия, больше не поддерживается : 1.9 | 2015-08-05 | 1.9.12 | 2019-07-24 | Больше не поддерживается |
Старая версия, но все еще поддерживается: 1.10 | 2018-04-13 | 1.10.6 | 2019-07-24 | Частично поддерживается |
Старая версия, больше не поддерживается: 1.11 | 2018-10-30 | 1.11.1 | 2019-01-11 | Больше не поддерживается |
Старая версия, нет больше не поддерживается: 1.12 | 2019-04-24 | 1.12.2 | 2019-07-24 | Больше не поддерживается |
Старая версия, больше не поддерживается: 1.13 | 2019-10-30 | 1.13.0 | 2019-10-30 | Нет более длительная поддержка |
Текущая стабильная версия: 1.14 | 2020-05-27 | 1.14.0 | 2020-05-27 | Полностью поддерживается, LTS |
Обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск |
Даты выпуска извлечены из Apache Файл CHANGES
Subversion, в котором записана вся история выпусков.
Subversion предлагает два типа хранилища репозитория.
Первоначальная разработка Subversion использовала пакет Berkeley DB. Subversion имеет некоторые ограничения при использовании Berkeley DB, когда программа, обращающаяся к базе данных, дает сбой или принудительно завершает работу. Никакой потери или повреждения данных не происходит, но репозиторий остается в автономном режиме, пока Berkeley DB воспроизводит журнал и очищает все невыполненные блокировки. Самый безопасный способ использования Subversion с репозиторием Berkeley DB включает в себя один серверный процесс, работающий от имени одного пользователя (а не через общую файловую систему). Бэкэнд Berkeley DB объявлен устаревшим в версии 1.8.
В 2004 году была разработана новая подсистема хранения данных, получившая название FSFS. Он работает быстрее, чем серверная часть Berkeley DB, в каталогах с большим количеством файлов и занимает меньше места на диске из-за меньшего количества журналов.
Начиная с Subversion 1.2, FSFS стала хранилищем данных по умолчанию для новых репозиториев.
Этимология «FSFS» основана на использовании Subversion термина «файловая система» для своей системы хранения репозитория. FSFS хранит свое содержимое непосредственно в файловой системе операционной системы, а не в структурированной системе, такой как Berkeley DB. Таким образом, это «файловая система [Subversion] поверх файловой системы».
Новая файловая система, названная FSX, находится в стадии разработки, чтобы снять некоторые ограничения FSFS. Начиная с версии 1.9, он не считался готовым к производству.
Доступ к репозиториям Subversion может осуществляться:
Все три средства могут обращаться как к FSFS, так и Репозитории Berkeley DB.
Любая версия клиента 1.x может работать с любым сервером 1.x. Новые клиенты и серверы имеют дополнительные функции и возможности производительности, но имеют резервную поддержку для старых клиентов / серверов.
Внутренне система Subversion состоит из нескольких библиотек, организованных как уровни. Каждый из них выполняет конкретную задачу и позволяет разработчикам создавать собственные инструменты желаемого уровня сложности и специфичности.
Файловую систему Subversion можно рассматривать как "двумерную". Для однозначной адресации элементов файловой системы используются две координаты:
Каждая версия в Файловая система Subversion имеет свой собственный корень, который используется для доступа к содержимому этой ревизии. Файлы хранятся в виде ссылок на самые последние изменения; таким образом, репозиторий Subversion довольно компактен. Система использует пространство для хранения пропорционально количеству внесенных изменений, а не количеству ревизий.
Файловая система Subversion использует транзакции для сохранения изменений атомарно. Транзакция работает с указанной версией файловой системы, не обязательно самой последней. У транзакции есть собственный корень, в который вносятся изменения. Затем он либо фиксируется и становится последней ревизией, либо прерывается. Транзакция на самом деле является долгоживущим объектом файловой системы; клиенту не нужно фиксировать или прерывать транзакцию, он может также начать транзакцию, выйти, а затем повторно открыть транзакцию и продолжить ее использование. Потенциально несколько клиентов могут получить доступ к одной и той же транзакции и вместе работать над атомарным изменением, хотя ни один из существующих клиентов не предоставляет эту возможность.
Одна важная особенность файловой системы Subversion - это свойства: простые пары текстовое имя = значение. Большинство свойств встречается в записях файловой системы (т. Е. Файлах и каталогах). Они версируются так же, как и другие изменения файловой системы. Клиент Subversion резервирует префикс svn: для встроенных свойств, но для определения настраиваемых свойств можно использовать другие имена.
.cvsignore
.Subversion также использует свойства для самих ревизий. Как и указанные выше свойства в записях файловой системы, имена полностью произвольны, при этом клиент Subversion использует определенные свойства с префиксом svn :. Однако эти свойства не версируются, и они могут быть изменены позже, если это разрешено обработчиком pre-revprop-change.
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 рекомендует делать копии моментальных снимков в хорошо известный подкаталог («tags /
») в пространстве дерева репозитория. Доступно лишь несколько предопределенных ссылок: HEAD
, BASE
, PREV
и COMMITTED
.
Эта проекция из истории в пространство имеет несколько проблем:
svn diff -r tag1: tag2 myfile
не работает; это немного сложнее, чем достичь, требуя от пользователя знания и ввода URL / путей к снимкам, а не только имен: svn diff / myfile / myfile
. Другие операции, такие как, например, svn log -r tag1: tag2 myfile
, просто невозможны.tags /
: trunk / / component foo / / component bar / теги / /1.1/ / component foo / / component bar / | или | component foo / / транк / / теги / /1.1/ компонент бар / / транк / / теги / /1.1/ |
Для решения таких проблем на плакатах в списках рассылки 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 для повышения производительности и переписанную библиотеку рабочих копий.