Совместная работа с удаленным репозиторием Mercurial, который поддерживается SVN

Компания, в которой я сейчас работаю, использует SVN. Здесь много команд, у которых есть свои репозитории для проектов, над которыми они работают. Эти репозитории иногда зависят друг от друга (используя svn:external), например, какой-то проект конечного пользователя, использующий репозиторий основной команды и так далее.

Я хочу перейти из SVN в Mercurial со своей командой. Я хочу настроить рабочий процесс, как это

  1. Сначала клонируйте наше текущее репозиторий SVN в Mercurial, поместите его на некоторый сервер и раздайте его членам команды (с помощью hg serve в первый раз)
  2. Члены команды начинают работать только с Mercural, без прямых коммитов SVN, обновлений, проверок. Только push/pull в / из корневого репозитория Mercurial (был настроен на шаге 1.).
  3. В конце концов (какая-то работа cron?) Наше хранилище Mercurial синхронизируется со старым SVN-сервером, чтобы другие команды могли получить доступ к нашей работе.

Я задаюсь вопросом, возможно ли когда-либо сделать такую ​​установку? Я уже читал эту статью о расширении HgSubversion, но он не может дать мне третий шаг - синхронизация в восходящем направлении с SVN, после чего изменения в Mercurial поступили от удаленного члена команды.

2 ответа

Решение

Как вы выяснили, основное ограничение HgSubversion заключается в том, что вам нужно линеаризовать историю Mercurial при ее перемещении в Subversion. Это означает, что вы не можете иметь ветки в своей истории Mercurial, и поэтому трудно работать вместе как команда.

Кроме того, HgSubversion выполнит ребазинг, когда вы нажмете свои ревизии Mercurial. Представьте, что ваша команда старается перебазировать свои локальные коммиты, прежде чем отправлять на сервер Mercurial. Mercurial история выглядит так:

... r10 --- a1 --- a2 --- b1 --- b2 --- b3

где Алиса и Боб перебазировали свои ревизии, прежде чем их подтолкнуть. При синхронизации с Subversion вы получаете:

... r10 --- a1 --- a2 --- b1 --- b2 --- b3
       \
        r11 --- r12

и HgSubversion теперь будет перебазировать Mercurial ревизии поверх [r12]:

... r10 --- r11 --- r12 --- a1' --- a2' --- b1' --- b2' --- b3'

У Алисы и Боба все еще есть исходные необновленные наборы изменений без простых чисел. Поэтому им нужно раздеться, прежде чем они вытянут с сервера Mercurial команды. Такой рабочий процесс требует много внимания, чтобы осуществить.

Однажды я настроил более простой рабочий процесс для клиента: вместо того, чтобы перебрасывать наборы изменений Mercurial поверх ревизий Subversion, мы просто передали текущую версию файлов в Subversion. Это означает, что мы не сохраняем полную историю Mercurial в хранилище Subversion. С другой стороны, мы можем легко справляться со слияниями и так далее.

В приведенном выше примере сервер SVN получит r13 с состоянием ртутного хранилища из b3, Тот r13 ревизия будет большой: она содержит все изменения, сделанные в a1 в b3, Если люди, которые все еще используют Subversion, хотят увидеть индивидуальные изменения, им придется посмотреть на сервере Mercurial - сообщение о фиксации, которое мы помещаем в Subversion, содержит ссылки на отдельные наборы изменений в hgweb для Mercurial, так что легко прыгнуть туда.

Я задаюсь вопросом, возможно ли когда-либо сделать такую ​​установку?

Да, но могут быть некоторые проблемы в не столь очевидных случаях, которые не прозрачно (и автоматически) переводятся из hg в svn

синхронизация в восходящем направлении с SVN, затем изменения в Mercurial поступили от удаленного члена команды

hg push, с svn-repo в разделе пути. Но смотри выше, это не будет работать всегда и может потребовать ручной перебазировки перед нажатием

Другие вопросы по тегам