stringtranslate.com

Подрывная версия Apache

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

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

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

История

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

Даты выпуска извлекаются из CHANGESфайла Apache Subversion [21] , в котором записана вся история выпусков.

Функции

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

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

Беркли DB (устарело)

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

ФСФС

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

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

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

ФСХ

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

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

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

  1. Локальная файловая система или сетевая файловая система, [25] доступная клиенту напрямую. В этом режиме используется схема доступа 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. Новые клиенты и серверы имеют дополнительные функции и возможности производительности, но имеют резервную поддержку для старых клиентов/серверов. [26]

Слои

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

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

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

Файловую систему Subversion можно рассматривать как «двумерную». [27] Для однозначного обращения к элементам файловой системы используются две координаты:

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

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

Характеристики

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

svn: исполняемый файл
Делает файл в рабочих копиях, размещенных в Unix , исполняемым, если это поддерживается файловой системой.
svn:mime-тип
Сохраняет тип интернет-медиа («тип MIME») файла. Влияет на обработку различий и слияний.
СВН: игнорировать
Список шаблонов имен файлов, которые следует игнорировать в каталоге. Похож на файл CVS.cvsignore .
СВН: ключевые слова
Список ключевых слов для замены в файле при внесении изменений. Сам файл также должен ссылаться на ключевые слова как $keyword$ или $keyword:...$ . Это используется для хранения определенной информации (например, автора, даты последнего изменения, номера редакции) в файле без вмешательства человека. Механизм замены ключевых слов происходит от RCS и CVS. [28]
svn: стиль eol
Заставляет клиента преобразовывать символы конца строки в текстовые файлы. Используется, когда необходима рабочая копия с определенным стилем EOL. Обычно используется «родной», так что EOL соответствуют стилю EOL операционной системы пользователя. Репозиториям может потребоваться это свойство для всех файлов, чтобы предотвратить несогласованные окончания строк, что само по себе может вызвать проблему.
СВН: внешние устройства
Позволяет автоматически извлекать части других репозиториев в подкаталог.
svn: нужна блокировка
Указывает, что файл должен быть извлечен с разрешениями только для чтения. Он предназначен для использования с запорным механизмом. Разрешение только для чтения напоминает о необходимости получить блокировку перед изменением файла: получение блокировки делает файл доступным для записи, а снятие блокировки снова делает его доступным только для чтения. Блокировки применяются только во время операции фиксации. Блокировки можно использовать без установки этого свойства. Однако это не рекомендуется, поскольку возникает риск изменения кем-то заблокированного файла; они обнаружат, что он заблокирован, только если их фиксация не удалась.
СВН: специальный
Это свойство не предназначено для установки или изменения пользователями напрямую. По состоянию на 2010 год он используется только для символических ссылок в репозитории. Когда символическая ссылка добавляется в репозиторий, файл, содержащий цель ссылки, создается с этим набором свойств. Когда Unix-подобная система извлекает этот файл, клиент преобразует его в символическую ссылку.
svn:mergeinfo
Используется для отслеживания данных слияния (номеров ревизий) в Subversion 1.5 (или более поздних версиях). Это свойство автоматически поддерживается командой слияния , и не рекомендуется изменять его значение вручную. [29]

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

СВН: дата
Дата и время изменения.
СВН: автор
Имя пользователя, отправившего изменения.
СВН: журнал
Предоставленное пользователем описание изменений.

Ветвление и тегирование

Subversion использует модель межфайлового ветвления Perforce [31] для реализации ветвей и тегирования . Филиал – это отдельное направление развития. [32] Маркировка — это маркировка хранилища в определенный момент времени, чтобы его можно было легко найти в будущем. В Subversion единственная разница между ветвями и тегами заключается в том, как они используются.

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

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

альтернативный текст
Визуализация простого проекта Subversion

Ограничения и проблемы

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

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

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

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

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

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

Теги и ветки Subversion

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

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

  1. При создании снимка система не придает никакого особого значения имени тега/снимка. В этом разница между копией и ссылкой . Версия записывается, и доступ к снимку можно получить по URL-адресу. Это делает некоторые операции менее удобными, а другие невозможными. Например, наивность svn diff -r tag1:tag2 myfileне работает; добиться этого немного сложнее, поскольку пользователю требуется знать и вводить URL-адреса/пути к снимкам, а не только имена: svn diff <URL-TO-TAG1>/myfile <URL-TO-TAG2>/myfile. Другие операции, например, svn log -r tag1:tag2 myfileпросто невозможны.
  2. Когда в дереве репозитория живут два (в идеале независимые) типа объектов, может возникнуть «борьба за верх». Другими словами, часто бывает сложно решить, на каком уровне создавать tags/подкаталог:
  3. Теги, по их традиционному определению, доступны только для чтения и имеют небольшой вес как в репозитории, так и на клиенте. Копии Subversion не доступны только для чтения, и, хотя они легки в репозитории, они невероятно тяжелы для клиента.

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

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

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

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

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

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

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

В 2002 году был проведен конкурс дизайнеров по выбору логотипа Subversion. Оригинальные записи, а также голоса за каждый логотип можно найти здесь. Текущий логотип получил наибольшее количество голосов на конкурсе.

Смотрите также

Примечания

  1. ^ Apache-2.0 с 7 июля 2009 г.

Рекомендации

Сноски

  1. ^ «Подрывная деятельность». каталог.fsf.org . Каталог свободного программного обеспечения . 2020 . Проверено 3 октября 2023 г.
  2. ^ «Фонд программного обеспечения Apache объявляет о 20-летии Apache® Subversion®» . Информационный центр GlobeNewswire (пресс-релиз). 27 февраля 2020 г. Проверено 29 января 2023 г.
  3. ^ аб Коллинз-Сассман, Бен; Брайан В. Фицпатрик; К. Майкл Пилато (2011). «Что такое Subversion? > История Subversion». Контроль версий с помощью Subversion (для Subversion 1.7) . Проверено 15 марта 2012 г.
  4. ^ Бенджамин Цейсс (2004). «Выпущена Subversion 1.0». Еженедельные новости Linux . Проверено 30 марта 2014 г.
  5. Рубинштейн, Дэвид (4 ноября 2009 г.). «Subversion объединяет усилия с Apache». СД Таймс. Архивировано из оригинала 11 ноября 2009 г. Проверено 15 марта 2012 г.
  6. ^ «Subversion теперь называется Apache Subversion» . 18 февраля 2010 года. Архивировано из оригинала 12 мая 2011 года . Проверено 15 марта 2012 г.
  7. ^ «Примечания к выпуску Subversion 1.1» . Проверено 21 сентября 2015 г.
  8. ^ «Примечания к выпуску Subversion 1.2» . Проверено 21 сентября 2015 г.
  9. ^ «Примечания к выпуску Subversion 1.3» . Проверено 21 сентября 2015 г.
  10. ^ «Примечания к выпуску Subversion 1.4» . Проверено 21 сентября 2015 г.
  11. ^ «Примечания к выпуску Subversion 1.5» . Проверено 21 сентября 2015 г.
  12. ^ «Примечания к выпуску Apache Subversion 1.6» . Проверено 21 сентября 2015 г.
  13. ^ «Примечания к выпуску Apache Subversion 1.7» . Проверено 21 сентября 2015 г.
  14. ^ «Примечания к выпуску Apache Subversion 1.8» . Проверено 21 сентября 2015 г.
  15. ^ «Примечания к выпуску Apache Subversion 1.9» . Проверено 21 сентября 2015 г.
  16. ^ «Примечания к выпуску Apache Subversion 1.10» . Проверено 17 апреля 2018 г.
  17. ^ «Примечания к выпуску Apache Subversion 1.11» . Проверено 31 октября 2018 г.
  18. ^ «Примечания к выпуску Apache Subversion 1.12» . Проверено 1 мая 2019 г.
  19. ^ «Примечания к выпуску Apache Subversion 1.13» .
  20. ^ «Примечания к выпуску Apache Subversion 1.14 LTS» . subversion.apache.org . Проверено 2 июня 2020 г.
  21. ^ «Файл ИЗМЕНЕНИЙ Apache Subversion» . Проверено 31 октября 2018 г.
  22. ^ аб Бен Коллинз-Сассман; Брайан В. Фицпатрик; К. Майкл Пилато (2011). «Глава 5: Стратегии развертывания репозитория». Контроль версий с помощью Subversion: для Subversion 1.7. О'Рейли.
  23. ^ «Примечания к выпуску Apache Subversion 1.8» . Проект Апач . Проверено 5 мая 2020 г.
  24. ^ «Примечания к выпуску Apache Subversion 1.9» .
  25. ^ Berkeley DB опирается на блокировку файлов и поэтому не должен использоваться в (сетевых) файловых системах, которые ее не реализуют.
  26. ^ Примечания к выпуску SVN 1.5
  27. ^ Базовое слияние
  28. ^ "rcs(1)" . Страницы руководства OpenBSD .
  29. ^ Свойства подрывной деятельности
  30. ^ до изменения ревпропа
  31. ^ Межфайловое ветвление: практический метод представления вариантов. Архивировано 14 июля 2007 г. в Wayback Machine.
  32. ^ Ветвление/тегирование — TortoiseSVN
  33. ^ «Реализовать настоящие переименования». Архивировано из оригинала 1 декабря 2002 г. Проверено 11 мая 2007 г.
  34. ^ Расширенное слияние
  35. ^ Улучшения, связанные с копированием/перемещением, в Subversion 1.5.
  36. ^ Записи рабочих копий перемещаются как первоклассная операция в Subversion 1.8.
  37. ^ "[SVN-516] SVN уничтожен" . Проверено 4 сентября 2023 г.
  38. ^ «Подклип — восстановление контрольной суммы SVN» .
  39. ^ Улучшения хранилища метаданных рабочей копии (клиент)
  40. ^ «[SVN-1256] Возможность сохранять время последней модификации (mtime) файлов под контролем версий» . Проверено 4 сентября 2023 г.
  41. ^ FreezeAttrib (сохраняет/восстанавливает атрибуты файла с помощью свойств)
  42. ^ fsvs - Полная система управления версиями системы на GitHub
  43. ^ Небезопасность программиста @ iBanjo
  44. ^ Видео Google Tech Talk и его расшифровка
  45. ^ «[SVN-2464] Канонизировать/stringprep имена файлов UTF-8 для обработки составных/разложенных различий, показанных, например, в Mac OS X HFS+» . Проверено 4 сентября 2023 г.
  46. ^ Например: Вайнтрауб, Дэвид (23 мая 2005 г.). «Ярлыки» Subversion против «тегов»». SVN Dev (список рассылки) . Проверено 5 мая 2020 г.
  47. ^ «Дорожная карта подрывной деятельности Apache» . Проект Апач . Проверено 5 мая 2020 г.
  48. ^ «Subversion представлена ​​как проект Apache Software Foundation» . 4 ноября 2009 года . Проверено 1 октября 2019 г.
  49. ^ «CollabNet поддерживает переход Subversion в проект верхнего уровня Apache» . КоллабНет. 1 марта 2010 г. Архивировано из оригинала 11 марта 2010 г.
  50. ^ WANdisco (7 января 2010 г.). «WANdisco назначает Хайрама Райта руководителем усилий по подрывной деятельности с открытым исходным кодом» . Выпуск новостей . Журнал с открытым исходным кодом. Архивировано из оригинала 18 января 2012 г. Проверено 29 октября 2011 г.
  51. ^ «Двоичные пакеты Apache Subversion» . Официальный сайт проекта . Проверено 29 октября 2011 г.
  52. ^ WANdisco (28 октября 2009 г.). «WANdisco представляет новые инициативы для проекта Subversion с открытым исходным кодом». Выпуск новостей . СМ Перекресток. Архивировано из оригинала 18 ноября 2011 г. Проверено 29 октября 2011 г.
  53. ^ «Дорожная карта подрывной деятельности Apache» . Официальный сайт проекта . Проверено 29 октября 2011 г.

Источники

дальнейшее чтение

Внешние ссылки