Лучший способ создать SVN-Mirror?

8

В настоящее время я ищу лучший способ настроить зеркало SVN. В настоящее время я вижу три возможности со своими недостатками:

  • Имейте SVN post-commit-Hook, который блокирует и синхронизирует через svnsync. Проблема здесь заключается в том, что фиксация блокируется, пока данные не будут переданы в зеркало.
  • Имейте SVN post-commit-Hook, который не блокирует и синхронизирует через svnsync. Здесь я вижу следующую, более тонкую проблему: представьте, что кто-то проверяет большой файл, а кто-то вскоре после этого проверяет небольшой файл. Поскольку фиксация неблокирующая, два процесса svnsync могут работать одновременно, и маленький файл может перегнать BIG-файл на пути к зеркалу (это кажется очень критичным по времени и маловероятным, хотя в принципе возможно). Их пересмотр поменял бы.
  • Синхронизируйте каждые пятнадцать минут с cron-заданием. Та же проблема, если фиксация занимает больше 15 минут и очевидно, что задержка.

Я забыл возможность? Я что-то не так понял? Любые идеи? Уже спасибо!

Возможно, я должен отметить, что вторая возможность - это возможность, предложенная разными веб-сайтами. Например, см. Http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync.

roesslerj
источник
Поскольку фиксация неблокирующая, два процесса svnsync могут работать одновременно, и маленький файл может перегнать BIG-файл на пути к зеркалу (это кажется очень критичным по времени и маловероятным, хотя в принципе возможно). Их пересмотр поменял бы. Это невозможно, svnsync реплицирует коммиты, когда они записаны в репозиторий. Они всегда будут появляться в порядке редакции.
Дейв Чейни

Ответы:

3

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

https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

Отказ от ответственности: в настоящее время я работаю в Atlassian, но не участвовал в реализации этого решения (только поддерживал его)

Как я сказал выше в комментарии, запуск svnsync из удаленного репозитория ведет себя детерминистически. Он не может применять наборы изменений не по порядку. Таким образом, единственной проблемой, с которой вы сталкиваетесь при использовании удаленного репозитория, является величина задержки из-за распространения набора изменений.

Дейв Чейни
источник
+1 для наблюдения, что svnsync не может выйти из строя, единственная проблема - потенциальная задержка.
Джим Т
Вы совершенно правы ... Я допустил глупую ошибку мышления. Так что простой и красивый хук post-commit SVN должен делать это в большинстве случаев. В случае, если задержка является проблемой, можно взглянуть на ссылочную статью Atlassian. Большое спасибо!
roesslerj
Просто имейте в виду, что хук post commit фиксирует коммитер до тех пор, пока хук не завершится. Я не уверен, что произойдет, если хук post commit завершится неудачей, я не думаю, что коммит откатывается, но это будет по крайней мере сбивающим с толку.
Дейв Чейни
Что ж, используя хук post-commit, вы можете выполнить команду, которая немедленно возвращается (например, через 'command &' в linux), при этом она не блокируется. Поскольку ловушка является пост-фиксацией, она не может откатить фиксацию. Если svnsync завершается неудачно, следующий svnsync должен синхронизировать две ревизии, что он и делает. Проблема, возникающая здесь, я бы подал под тему задержки.
roesslerj