Назад | Перейти на главную страницу

Двунаправленная фиксация и синхронизация Subversion

У меня есть Subversion 1.6, у него одно репо и зеркальное репо. Зеркальное репо, конечно, только для чтения. есть ли способ зафиксировать и синхронизировать эти репозитории в обоих направлениях?

Короткий ответ: Нет

Более длинный ответ: вы можете использовать путь "svnadmin dump-transfer dump- delete repo -recreate repo - svnadmin load", но это кошмар

PS: DVCS кажется более естественным решением в вашем случае

Вы смотрели на http://www.wandisco.com/subversion/replication? Они делают целую линейку продуктов, относящихся к многосайтовой SVN, но они стоят. Я никогда не пробовал их, но именно там я и оказался, когда искал это в последний раз.

Вы столкнетесь с целой кучей проблем, пытаясь сделать это вручную, но самое близкое, что я нашел:

  1. Вести список «партнерских» репозиториев SVN на каждом сайте.
  2. Добавьте перехватчики предварительной фиксации в оба репозитория, чтобы «заблокировать» другие репозитории в списке партнеров:
    1. проверьте наличие файла семафора, отпустите, если он существует
    2. создать файл семафора на каждом сервере-партнере
  3. Добавьте перехватчики после фиксации в оба репозитория:
    1. проверить последнюю ревизию во временной папке рабочей копии
    2. svn switch --relocate рабочая копия каждому партнеру
    3. зафиксировать в перемещенном репо
    4. удалить файл семафора
  4. Периодически проверяйте каждое репо, используя md5sum против svnadmin dump
    1. Выберите один, чтобы сбить с толку другие, в случае несоответствия контрольной суммы
    2. Сделайте обильные резервные копии всех партнеров, на случай, если кто-то пожалуется на затирание, и вам понадобится ревизия.

Я сэкономлю вам усилия - это не сработало. Абсолютная кобыла для настройки и чревата условиями гонки (вы просто не можете синхронизировать файл семафора достаточно быстро).

Короткий ответ: да.

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