Как синхронизировать два хранилища Subversion? - PullRequest
57 голосов
/ 27 сентября 2008

У моей компании есть филиал с медленным интернет-соединением. Наши разработчики страдают от взаимодействия с нашим центральным Subversion сервером. Можно ли для них настроить раб / зеркало? Они будут взаимодействовать локально с сервером, и все коммиты будут автоматически синхронизироваться с главным сервером.

Это должно работать максимально прозрачно для разработчиков. Юзабилити является обязательным.

Пожалуйста, не предлагайте изменить нашу систему контроля версий.

Ответы [ 7 ]

49 голосов
/ 27 сентября 2008

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

СВН-зеркальный путь

Вы можете использовать svn mirror, как описано в документации по SVN, для создания только для чтения зеркала вашего главного репозитория. Каждый из ваших разработчиков взаимодействует с ближайшим к ним зеркалом. Однако пользователи подчиненного хранилища должны будут использовать

svn switch --relocate master_url

прежде чем они смогут совершить коммит, и они должны будут помнить, чтобы переместить обратно на раба, как только они закончили. Это можно автоматизировать с помощью сценария-обертки вокруг команд изменения репозитория в SVN, если вы используете клиент командной строки. Имейте в виду, что операция перебазирования при быстром добавляет немного накладных расходов. (И будьте осторожны, чтобы дублировать UUID хранилища - см. документация SVN .)

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

Путь СВК

svk - это набор сценариев Perl, которые эмулируют службу распределенного зеркалирования через SVN. Вы можете настроить его так, чтобы локальная ветвь (зеркало) использовалась несколькими разработчиками. Тогда основное использование для разработчиков будет полностью прозрачным. Вам придется использовать клиент svk для сбора, объединения и запуска вишни. Это выполнимо, если вы можете разобраться в распределенных концепциях.

git-svn way

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

Заключительные слова

Все зависит от вашей среды разработки и требуемого уровня интеграции. В зависимости от вашей IDE (и если вы можете изменить SCM ), вы можете взглянуть на другие полностью распределенные SCM (подумайте Mercurial / Bazaar / Git / ...), которые поддерживают распределенную разработку из коробки.

29 голосов
/ 28 сентября 2008

В Subversion 1.5 появилась поддержка прокси, когда вы используете http для размещения своего хранилища. Разработчики могут оформить свои рабочие копии у ведомого. Тогда все операции только для чтения (diff, log, update и т. Д.) Будут использовать slave. При фиксации ведомое устройство прозрачно передает всю операцию записи ведущему.

6 голосов
/ 27 сентября 2008

Вы должны попробовать Система контроля версий SVK

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

По этой ссылке есть текст о Использование SVK для синхронизации SVN-репозиториев

2 голосов
/ 01 декабря 2009

Если одно из хранилищ полностью доступно только для чтения, вы можете использовать svnsync, чтобы поддерживать его в актуальном состоянии с главным хранилищем. Этот инструмент часто используется в сочетании с поддержкой прокси-сервера для создания настройки главного подчиненного устройства.

например. Apache делает это для отражения своего хранилища на разных континентах. Главный репозиторий находится в США, но если я получаю доступ к репозиторию из ЕС, я получаю локальное зеркало, которое работает так же хорошо, как и главный сервер.

1 голос
/ 16 сентября 2014

VisualSVN Server Многосайтовая репликация репозитория была разработана для этого случая.

Вы можете хранить главный репозиторий в своем главном офисе и настраивать несколько записываемых подчиненных репозиториев в удаленных местах.

Это должно работать максимально прозрачно для разработчиков. Юзабилити обязательно.

  • Репликация между ведомыми устройствами и ведущим является прозрачной и автоматической,

  • Каждый главный и подчиненный репозиторий является репозиторием Subversion с возможностью записи с точки зрения пользователя,

  • Работает "из коробки" и может быть настроен в пару кликов через консоль MMC VisualSVN Server Manager.

VisualSVNServerManagerConsoleMultisite

1 голос
/ 22 марта 2013

Существует коммерческое решение, которое обеспечивает настоящую активно-активную репликацию (не ведущее-ведомое) репозиториев Subversion, если вам нужна производительность и безопасность данных сверх того, что обеспечивает svnsync, под названием «Subversion MultiSite».

Отказ от ответственности: я работаю в компании, которая делает это решение

1 голос
/ 17 июня 2011

Inotify-tools хорошо работает для меня, подробности приведены на этом сайте:

http://planet.admon.org/synchronize-subversion-repositories-with-inotify-tools/

...