как мне организовать ртутные репозитории при миграции с SVN - PullRequest
2 голосов
/ 10 февраля 2011

Наш проект хранится в subversion следующим образом:

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

Как мне организовать mercurial хранилища для его размещения?Я создал три репозитория, один для транка и один для каждой ветви в качестве центральных серверов, но поскольку у mercurial есть филиалы, возможно, я делаю это неправильно.По крайней мере, это кажется неправильным, но когда я попытался перенести один набор изменений из локального репо разработки в стабильный локальный репо, он выдвинул все мои новые наборы изменений.Это не то, что я хотел.

EDIT1

У меня была ревизия 623 в багажнике и 620 в конюшне.Я хотел подтолкнуть только ревизию 623 к стабильной.Я попытался hg push -r623 ../stable, но hg сообщил мне, что 4 набора изменений были отправлены.

1 Ответ

6 голосов
/ 10 февраля 2011

Хорошо, давайте займемся этим одним вопросом за один раз.

Обратите внимание, что для макета и организации есть много способов сделать это, и единственный человек, который действительно решит, это вы.

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

Что касается старого кода, я бы оставил его в отдельном репозитории и просто объединил бы все, что вам нужно, с основным, если вам нужно это сделать.

Как так, вот как я бы это организовал:

  • Основной репозиторий
    • ветка по умолчанию (у вас это всегда есть в Mercurial), это то, что вы ранее называли trunk
    • стабильная ветвь (это похоже на вашу стабильную ветку ранее)
  • Репозиторий старого кода
    • ветка по умолчанию, извлеченная из основного хранилища
    • «старая» ветка, старый код, вы можете легко объединить его со старого по умолчанию, когда вам нужно
      • если вам не нужно объединять старый и старый по умолчанию, поместите весь старый код в ветку по умолчанию и не создавайте именованную ветвь для старого кода

Сосредоточив внимание на основном хранилище, это дает вам следующие способности:

  • Вы можете обновить туда и обратно в одной рабочей папке между стандартной и стабильной
  • Вы можете легко различить ветви
  • Вы можете легко объединяться из одной ветви в другую, оба пути
  • Теги являются глобальными, видимыми все время

Последний вопрос: как вы можете выбрать наборы изменений при слиянии.

Ну, ты не можешь. Слияние объединяет выбранную вами ревизию + всех ее предков. Так происходит слияние в Mercurial.

Есть два способа смягчить это:

  • расширение трансплантата
  • зафиксировать изменение в другом месте, чтобы начать с

Расширение для трансплантации позволяет вам взять один или несколько наборов изменений из одной ветви и скопировать их (пересадить) в другую ветку. Наборы изменений будут помечены как трансплантированные, поэтому будущие слияния не сработают. Проблема, однако, в том, что кроме того, что вы добавляете в сообщения фиксации, в графическом журнале нет видимых строк, которые бы указывали на то, что вы сделали.

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

Предположим, у вас есть следующие две ветви:

default:  1--2--3--4--5--6
           \
stable:     x--y--z

Теперь вы хотите зафиксировать набор изменений 7 поверх набора изменений 6 по умолчанию, а затем «слить» только этот набор изменений, а не 2-5, в стабильную ветвь, и, как я уже сказал, слияние этого не сделает .

Вместо этого вы можете найти предыдущего общего предка, 1, в этом случае зафиксировать новый набор изменений поверх этого набора изменений, фактически получив этот журнал репозитория:

default:  1--2--3--4--5--6
  |       |\
  +---    | 7
           \
stable:     x--y--z

Затем вы можете объединить 7-ю ревизию со стабильной и по умолчанию:

default:  1--2--3--4--5--6--7
  |       |\               /
  +---    | 7------+------+
           \        \
stable:     x--y--z--7

Вот как TortoiseHg показывает, что в последнем репозитории я только что переместил метки:

TortoiseHg display

...