Периодически копируйте версии из одного репозитория SVN в другой активный репозиторий SVN.

Моя компания поддерживает два репозитория SVN, репозиторий 1 и репозиторий 2:

  1. В этом репозитории есть несколько проектов, и доступ к нему имеют только разработчики внутри компании. Доступ осуществляется через HTTPS, а аутентификация — через домен Windows.
  2. В этом репозитории есть один проект, доступ к которому имеют разработчики внутри компании и разработчики нашего клиента. Доступ осуществляется через svn://, а аутентификация — через файл passwd.

У нас есть некоторый код в папке в репозитории 1, который мы хотели бы загрузить пользователям репозитория 2. Очевидный ответ — использовать SVN Externals, но, насколько я понимаю, для этого разработчикам клиента потребуется иметь учетные записи на наш домен, и нашим айтишникам это не нравится.

Поэтому единственное решение, которое я вижу, — это какое-то задание cron, которое периодически запускается для копирования необходимых файлов из репозитория 1 в репозиторий 2. Я нашел инструмент под названием Tailor, который утверждает, что делает то, что мне нужно, но пока мне не удалось заставить его работать правильно.

Прежде чем я потрачу больше времени, пытаясь заставить Tailor работать, кто-нибудь может предложить другой подход? В крайнем случае я могу создать программу, которая сделает это за меня, что не должно быть слишком сложно, но всегда лучше использовать существующее приложение, если оно есть!

Заранее спасибо за любую помощь/указатели!

Богатый


person Rich    schedule 16.04.2009    source источник
comment
Есть ли коммиты в обоих репозиториях?   -  person fglez    schedule 16.04.2009


Ответы (4)


Если экстерналы SVN будут работать, но единственным камнем преткновения будут права доступа, то почему бы не сделать клон репозитория и указать на него экстерналы?

SVN теперь имеет хорошую поддержку зеркалирования:

https://www.opends.org/wiki/page/MirroringASubversionRepository

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

Однако вам нужно убедиться, что единственное, что обновляет зеркало, — это команда svn sync — пользователи репозитория 2 не смогут зафиксировать изменения обратно в репозиторий 1.

На этой странице есть очень полезная информация:

http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt

person Jim T    schedule 16.04.2009
comment
Это действительно хорошая идея - единственная маленькая загвоздка в том, что зеркало репозитория 1 должно работать на той же машине, что и репозиторий 2 - я предполагаю, что это будет означать возню с портами и так далее... - person Rich; 16.04.2009
comment
Если apache используется для обслуживания зеркала, то это уже другой протокол/порт и т. д. (это требуется для прокси-сервера со сквозной записью). В противном случае да, это другой порт или другой IP-адрес (машинам может быть присвоено несколько IP-адресов/имен). - person Jim T; 16.04.2009
comment
svnserve --listen-host=другой IP - person Jim T; 16.04.2009
comment
Могут ли изменения быть зафиксированы + распространены в оба репозитория? - person fglez; 16.04.2009
comment
Я не думаю, что они могут, но это нормально — мне просто нужно, чтобы в репозитории 2 была актуальная копия подмножества файлов в репозитории 1 — путем зеркалирования репозитория 1 в репозиторий 1a и использования тех же элементов управления доступом, Я могу получить это, при этом коммиты в репозитории 1 и 2 все еще возможны. - person Rich; 16.04.2009
comment
Если зеркало обслуживается apache и настроено как прокси-сервер для записи для главного репозитория, тогда да, изменения могут быть распространены. Но я не знаю модели безопасности при таком использовании. - person Jim T; 16.04.2009

Я вижу, вам нужно внести изменения из обоих репозиториев.

Вы можете использовать ту же идею svnsync для создания записи -через прокси.

Используя это, зеркальный репозиторий передает запросы на запись обратно главному прокси. На данный момент я не уверен, что происходит с аутентификацией, но, вероятно, здесь стоит разобраться.

Также можно посмотреть эту информацию.

person Jim T    schedule 16.04.2009

Нужно ли, чтобы внешние разработчики изменяли код в папке в репозитории 2, если нет, возможно, вам вообще не нужно использовать SVN.

В общем, наличие двух репозиториев с SVN с одним и тем же кодом может привести к путанице.

Другие варианты

  • Если вам нужно, чтобы внешние разработчики редактировали файлы в репозитории 2, не могли бы вы сделать так, чтобы внешние файлы шли в другую сторону, поэтому в репозитории 1 есть определение внешних файлов для репозитория.
  • Обойдите своих ИТ-специалистов, поместив весь код в репозиторий.
  • Используйте ГИТ.
person Jeremy French    schedule 16.04.2009
comment
Использование внешних внешних данных в другом направлении — умная идея, но на самом деле нам не нужен доступ к данным репозитория 2, а в репозитории 1 находится весь остальной код проекта, поэтому я думаю, что другим членам команды это не понравится. К сожалению, GIT не произойдет, по крайней мере, не сейчас! - person Rich; 16.04.2009

Существует SVNReplicate, который можно настроить для работы с один проект, но это тот случай, когда распределенная система контроля версий должна быть более подходящей.

person fglez    schedule 16.04.2009