Как получить репликацию мастер-мастер с помощью Subversion?

Вроде бы простая проблема:

  • У меня есть репозиторий SVN внутри нашего брандмауэра.
  • У меня есть репозиторий SVN за пределами нашего брандмауэра.
  • У меня есть пользователи внутри и снаружи брандмауэра. (без VPN не вариант :( это было бы слишком просто)
  • машины внутри брандмауэра МОГУТ общаться с внешним сервером SVN. Но не наоборот.
  • внешний SVN - это временное явление - основной репозиторий всегда будет внутри.

Я хочу как-то (изнутри, скорее всего) взять все изменения в одном, и применить их к другому. И наоборот. Звучит просто, и я предполагаю, что подобные GIT могут это сделать, но мы используем SVN.

Кто-нибудь сделал это? Я не возражаю против того, чтобы это был ручной процесс — есть всего пара сторонних людей, и им не нужны ежеминутные обновления, достаточно двух-трех раз в день.

Я считаю, что apache.org делает это, но я не могу найти документы о том, КАК они это делают. Есть пара продуктов, которые это делают (ну, один), но я хотел бы знать, есть ли у кого-нибудь хороший, чистый способ сделать это без них. svnsync делает это, только в одном направлении (главный-подчиненный)

Рад, что он работает на Windows, Linux или Mac, поскольку они есть у нас на всех. Хотя Windows и Mac предпочтительнее.

Помощь! :) :)

[обновление] после 12 месяцев возни (и не нужности этого в конце концов) правильный ответ, на мой взгляд, правильный. Используйте git — у вас есть одно репо, которое извлекается из SVN-A, затем переходите к новому репозиторию git, а затем отправляйте оттуда в SVN-B. Должно сработать :)


person Nic Wise    schedule 29.09.2008    source источник
comment
похоже, что наличие горячей копии не является обязательным требованием, но если вас интересуют коммерческие решения, Subversion MultiSite или Clustering от WANdisco позволяют выполнять репликацию «активный-активный» wandisco.com/subversion/multisite   -  person vinnyjames    schedule 14.01.2011


Ответы (8)


Я бы рекомендовал SVK или git-svn.

Оба они позволяют вам создать внешнее зеркало вашего репозитория svn и позволяют внешним разработчикам делать коммиты непосредственно на внешнем зеркале. Затем вы можете извлекать и отправлять изменения из этого внешнего зеркала во внутреннее мастер-репозиторий.

git-svn (я думаю) потребует, чтобы внешние разработчики использовали git. Я предпочитаю это, но я бы не хотел навязывать это другим.

Однако SVK позволяет внешним разработчикам продолжать использовать svn. Поскольку внутреннее репо доступно только внутри страны, внутренняя учетная запись или пользователь должны будут выполнять периодическую синхронизацию (вероятно, будет работать задание cron).

Вот расширенное руководство на вики SVK: ИспользованиеSVKAsARepositoryMirroringSystem

person Community    schedule 29.09.2008
comment
Похоже, что СВК был заброшен более десяти лет назад. Этот пост нельзя пометить как ответ. Существуют существующие современные и обновленные системы, которые делают Subversion децентрализованной и обеспечивают репликацию на нескольких сайтах. - person bahrep; 22.03.2020

Простота обычно является лучшим способом, и похоже, что у вас уже есть простое решение: используйте репозиторий SVN за пределами брандмауэра.

Вы уже сказали, что машины внутри брандмауэра могут получить к нему доступ, и, очевидно, машины снаружи могут получить к нему доступ... так что это все, так какое у вас есть оправдание для второго репозитория SVN внутри брандмауэра? Если это просто резервная копия, то просто сделайте резервную копию той, что снаружи.

Дайте мне знать, если я упустил часть ваших требований.

Еще одна мысль ... если у вас есть как внутренние, так и внешние экземпляры SVN ... что помешает им одновременно выдавать один и тот же идентификатор списка изменений для разных целей? Если вы ищете децентрализованное решение, вам следует обратить внимание на GIT, а не на SVN.

person Community    schedule 29.09.2008
comment
Спасибо, но главное нужно оставить внутри - это временное дело, так как коллеге нужно работать дома. Я не объяснил это раньше, извините (обновил вопрос). Спасибо :) - person Nic Wise; 29.09.2008

Одной из функций VisualSVN Server Enterprise Edition является Репликация многосайтового репозитория, которая делает именно то, что вы ищете.

Эта функция основана на технологии распределенной файловой системы VisualSVN (VDFS), которая была разработана для обеспечения прозрачной репликации репозитория Subversion между географически распределенными сайтами. Некоторые из примечательных особенностей VDFS:

  • Все распределенные репозитории VDFS Subversion доступны для записи,
  • VDFS обеспечивает прозрачную двунаправленную репликацию данных,
  • VDFS поддерживает правила авторизации репликации и расширенные механизмы проверки подлинности, такие как встроенная проверка подлинности Windows (NTLM/Negotiate) с безопасным шифрованием SSL/TLS.
  • Все репозитории VDFS содержат один и тот же набор данных,
  • Репликация репозитория по глобальной сети с VDFS до 10 раз быстрее, чем репликация на основе прокси-сервера со сквозной записью.
  • Настройка VDFS осуществляется через графический интерфейс без каких-либо сложных действий.

Стоит отметить, что VDFS следует классической модели репликации master-slave, которая имеет значительные преимущества по сравнению с моделью репликации master-master, поскольку она больше подходит для репликации репозиториев Subversion с FSFS типа fs. бэкенд. Технология VDFS намного надежнее, чем решения для репликации master-master для SVN.

Интерфейс конфигурации VDFS для многосайтовых репозиториев Apache SVN

person bahrep    schedule 11.02.2015
comment
Спасибо @bahrep - я спрашивал об этом в 2009 году - я давно, давно бросил SVN и перешел на git. - person Nic Wise; 12.02.2015

Хм... синхронизация двух репозиториев друг с другом, я думаю, нетривиальна. В основном это включало бы превращение SVN в Mercurial или Git.

person Community    schedule 29.09.2008

Наиболее простым и масштабируемым решением является репликация master/slave с использованием svnsync, описанная в книге Subversion: http://svnbook.red-bean.com/en/1.7/svn-book.html#svn..serverconfig.httpd.extra.writethruproxy

person Mike van Lammeren    schedule 03.08.2011

Одна вещь, которую вы можете попробовать, это реплицировать репо на уровне файла. Я использую FolderShare (http://www.foldershare.com — работает на Windows и Mac) для аналогичного сценарий, хотя я реплицирую его только для целей резервного копирования и не пытался подключиться к реплике с помощью SVN.

person Franci Penov    schedule 29.09.2008
comment
SVN использует базу данных и осуществляет скрытую блокировку. Простое резервное копирование на уровне блоков/битов может привести к повреждению и непригодности зеркала. - person Eddie; 31.07.2014

http://wandisco.com/subversion/multisite/

Subversion MultiSite использует уникальную технологию репликации WANdisco для немедленной синхронизации репозиториев Subversion, подключенных через глобальную сеть (WAN). Пользователи в любом месте испытывают скорость работы локальной сети (LAN) как для операций чтения, так и для операций записи. Subversion MultiSite также обеспечивает непрерывное горячее резервное копирование и возможности самовосстановления, которые автоматизируют аварийное восстановление, что практически исключает простои.

person Community    schedule 24.09.2009
comment
Могу ли я установить, какую пропускную способность может потреблять wandisco? - person Peter Kahn; 19.11.2009

Если вы ищете пошаговое объяснение репликации master/slave с использованием svnsync, следуйте http://lasanthals.blogspot.com/2012/09/main-steps-of-configuring-svn_4.html

person lasantha    schedule 16.09.2012
comment
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы только по ссылкам могут стать недействительными, если связанная страница изменится. - person Ben; 16.09.2012