Все возможно :)
РЕДАКТИРОВАТЬ : поспешность никогда не приводит к качеству, и мой ответ не пропал, пропуская все ссылки на Windows в вопросе. Итак, здесь приведен краткий обзор того, как заставить синхронизацию работать в Windows.
У вас есть 2 машины в этом случае:
- Машина A: где работает хранилище
Теперь.
- Машина B: где вы хотели бы
синхронизировать с.
Создайте новый репозиторий на B, который вы хотите синхронизировать с A. Очень важно, чтобы этот репозиторий был пустым (работает на rev0).
На B в папке SVN недавно созданного репозитория перейдите к / hooks и создайте следующие BAT-файлы:
старт-commit.bat
IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2 )
exit 1
goto :eof
:label1
exit 0
предварительно revprop-change.bat
IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
someuser
являющийся синхронизатором, который существует в репозитории компьютера A и является единственным пользователем с правами в репозитории компьютера B. Очень важно, чтобы никакие коммиты не выполнялись вручную в хранилище машины B.
В папке /hooks
репозитория на компьютере A
после commit.bat
CD PATH_TO_SUBVERSION\bin
svnsync sync svn://machineB/repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password machineBpassword
Как только эти пакетные файлы будут созданы, нам нужно сообщить репозиторию на B, что мы хотим синхронизироваться с ним:
svnsync initialize svn://
machineB /repos svn://
machineA /repos --non-interactive --no-auth-cache --source-username
machineAusername --source-password
machineApassword --sync-username
machineBusername --sync-password
machineBpassword
, который должен возвращать что-то вроде: Copied properties for revision 0.
Теперь каждый раз, когда вы фиксируете в хранилище на машине A, оно будет копироваться в хранилище машины B.
Очень важно отметить, что если вы хотите синхронизироваться с Google Code или другим онлайн-репозиторием, чтобы они передали структуру ствола / ветвей / тегов в ревизию 1. Вы должны связаться с ними, чтобы сбросить репозиторий. если вы хотите использовать расположение стороннего хранилища в качестве хранилища синхронизации.
Чтобы отдать должное, я скопировал pre-revprop-change.bat и start-commit.bat из http://www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9
Я сам реализовал это в тестовом репозитории и, похоже, работает как шарм. Я рад, что заметил этот вопрос, хотя svnsync слишком глубоко погрузился в мой череп. Я имел в виду настроить его при настройке SVN на работе. Итак, я знаю, что первым делом я буду делать завтра на работе, спасибо за это!
РЕДАКТИРОВАТЬ 2:
Если у вас, как и у меня, есть тонны репозиториев, этот общий post-commit.bat может вам понравиться:
SET REPOS=%1
SET REV=%2
SET REPOS=%REPOS:D:\SVN=%
CD "C:\Program Files\Subversion\bin"
svnsync sync svn://machineB/%REPOS%-sync --non-interactive --no-auth-cache --source-username usernameA --source-password passwordA --sync-username usernameB --sync-password passwordB
Это ловит имя репозитория и использует его для динамического определения URL-адреса синхронизации. Я добавил суффикс всех моих репозиториев синхронизации на машине B с -sync
для ясности. Бит D:\SVN
является корнем svnserve на machineB , хотя этот универсальный BAT-файл должен быть помещен в / hooks machineA svnserve root.