Управление версиями: несколько репозиториев для одного проекта

возможно ли иметь несколько репозиториев для одного и того же проекта?

в настоящее время я использую 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 в качестве удаленного РЕПО, если вы так склонны.

  • посмотреть GIT инструмент
  • посмотреть GitHub для бесплатного публичного хостинга