Хорошо, давайте займемся этим одним вопросом за один раз.
Обратите внимание, что для макета и организации есть много способов сделать это, и единственный человек, который действительно решит, это вы.
Однако мой совет, учитывая рабочий процесс, который вы описали в своем комментарии, - использовать один репозиторий по умолчанию и стабильный, используя именованные ветви для двух.
Что касается старого кода, я бы оставил его в отдельном репозитории и просто объединил бы все, что вам нужно, с основным, если вам нужно это сделать.
Как так, вот как я бы это организовал:
- Основной репозиторий
- ветка по умолчанию (у вас это всегда есть в 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 показывает, что в последнем репозитории я только что переместил метки: