Совместная работа с удаленным репозиторием 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 поступают от удаленного члена команды.


person Olegas    schedule 28.02.2012    source источник


Ответы (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 server. Такой рабочий процесс требует большой осторожности.

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

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

person Martin Geisler    schedule 28.02.2012
comment
Да, я согласен. Рабочий процесс HgSubversion не подходит для команд (даже для отдельных пользователей это довольно неудобно). Если нет ничего плохого в том, что SVN теряет историю фиксации, лучше просто зафиксировать моментальные снимки в SVN (например, при задании cron или каждый раз при отправке кода). - person Laurens Holst; 28.02.2012
comment
Мартин, Лауренс - да, потеря истории коммитов в SVN после перехода на Mercurial допустима. Я думаю, что это решение (массовая фиксация SVN) подходит для моего случая. - person Olegas; 29.02.2012

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

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

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

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

person Lazy Badger    schedule 28.02.2012