Совместная работа с удаленным репозиторием Mercurial, который поддерживается SVN - PullRequest
1 голос
/ 28 февраля 2012

Компания, в которой я сейчас работаю с 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 ]

1 голос
/ 28 февраля 2012

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

Кроме того, HgSubversion сделает ребаз , когда вы нажмете свои ревизии 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 с состоянием хранилища Mercurial из b3. Эта ревизия r13 будет большой: она содержит все изменения, сделанные от a1 до b3. Если люди, которые все еще используют Subversion, хотят увидеть отдельные изменения, им придется посмотреть на сервере Mercurial - сообщение о фиксации, которое мы помещаем в Subversion, содержит ссылки на отдельные наборы изменений в hgweb для Mercurial, так что легко прыгать туда.

0 голосов
/ 28 февраля 2012

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

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

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

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

...