Управление версиями: несколько репозиториев для одного проекта
возможно ли иметь несколько репозиториев для одного и того же проекта?
в настоящее время я использую SVN с TortoiseSVN с репозиториями на внешнем жестком диске в моем доме, и что касается резервного копирования, это не идеально.
Итак, то, что я имею в виду, делает учетную запись с unfuddle и наличие второй (мой дом является первым) репозиторием, где я могу совершить там (даже для решение для удаленного резервного копирования).
теперь, конечно, я хочу целостности в моем коде, и я не хочу расхождений между ними (или больше ?) репозитории, что означает, что оба репозитория должны обновляться при фиксации кода.
Так что я могу сделать, чтобы это произошло?
Что-то, что у меня на уме, фиксируется в моем основном репозитории (домашнем), а затем автоматически фиксируется в онлайн-репозитории (unfuddle) автоматически (потому что, конечно, я не хочу вручную фиксировать оба репозитория каждый раз, когда я фиксирую свой код)
это возможно ?
3 ответов
все :)
редактировать: спешка никогда не приводит к качеству, ни мой ответ, пропуская все ссылки Windows в вопросе. Итак, вот краткое описание того, как заставить синхронизацию работать в Windows.
у вас есть 2 машины в этом случае:
- машина A: где работает репозиторий сейчас.
- машина B: где вы хотели бы синхронизировать.
создать новый репозиторий на B, который вы хотите синхронизировать с from A. очень важно, чтобы этот репозиторий был пустым (работает на rev0).
на B в папке SVN вновь созданного репозитория перейдите к /hooks И создайте следующие файлы BAT:
старт-коммит.летучая мышь!--21-->
IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2 )
exit 1
goto :eof
:label1
exit 0
pre-revprop-изменение.летучая мышь!--21-->
IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
someuser
будучи syncuser, который существует в репозитории машины A и является единственным пользователем с правами в хранилище машины Б. Очень важно, чтобы никакие коммиты не выполнялись вручную в репозитории машины B.
на /hooks
папка репозитория на машину
пост-коммит.летучая мышь!--21-->
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://
мачинеа/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 или другой онлайн-репозиторий, который они фиксируют магистраль / ветви/теги структура в редакции 1. Вы должны связаться с ними, чтобы сбросить репозиторий, если вы хотите использовать это стороннее хранилище в качестве репозитория синхронизации.
чтобы отдать должное, где я скопировал pre-revprop-change.bat и start-commit.летучая мышь от http://www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9
я только что реализовал это сам в тестовом репозитории и, похоже, работает как шарм. Я рад, что ... заметил этот вопрос, хотя svnsync слишком глубоко погрузился в мой череп. Я хотел настроить его при настройке svn на работе. Итак, я знаю, что первое, что я сделаю завтра на работе, Спасибо за это!
EDIT 2:
если у вас, как и у меня, есть тонны репозиториев этого общего post-commit.летучая мышь может обратиться к вам:
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
для ясности. The D:\SVN
бит-это корень svnserve на machineB хотя этот общий файл BAT должен быть помещен в / hooks мачинеакорень svnserve.
Я не уверен, что полностью понял вашу проблему, но я думаю, что то, что вы ищете svnsync.
вы можете иметь свой основной репозиторий на жестком диске вашего ноутбука и зеркальный репозиторий на рабочем столе/домашнем сервере.
просто зафиксируйте изменения в главном репозитории, а затем синхронизируйте его с зеркальным репозиторием (- АМИ). Этот процесс поэтапный, поэтому только изменения с момента последней синхронизации, будут переданы, но будьте осторожны с неверсированные свойства.
с чистой точки зрения SVN нет, у вас может быть только один .папка svn, которая указывает только на 1 РЕПО в вашей рабочей папке.
вы можете использовать post-commit-hooks на вашем SVN repo, чтобы попытаться синхронизировать оба репозитория.. но на самом деле у вас просто неправильный инструмент, если это то, что вы хотите.
проблема, которую вы описываете, в основе своей является распределенной системой управления версиями, такой как GIT. Что позволяет совершать коммиты локально, а также нажимать его на удаленный хранилище.
вы даже можете использовать git локально и SVN в качестве удаленного РЕПО, если вы так склонны.