Это сильно зависит от того, каковы ваши «ветки прошлых версий», но я думаю, что должен принять другой рабочий процесс при миграции.
Думайте о слиянии ветвей как о слиянии рек: все, что было в одной, находится и в другой, после того, как вы слились. Вот почему, если вы хотите реализовать функцию, которая должна заканчиваться в нескольких ветвях, предложенный способ заключается в том, что вы реализуете ее в одной из них, а затем объединяете в другие. Очень важно понимать, что все , которое было в исходной ветке, попадет в целевую ветвь, а не только в реализованную вами функцию.
Так что разумно иметь ветки прошлой версии, чтобы сформировать матрешку . Например, у вас есть три долгоживущие ветви: 1.x
, 2.x
и default
. Все функции в 1.x
также присутствуют в 2.x
и default
, все функции в 2.x
также присутствуют в default
. (Здесь default
является этапом для вашей следующей основной версии; вы создаете новую ветку 3.x
, когда вы выпускаете v3.0.)
Итак, если вы хотите создать новую функцию в 1.x
, вы реализуете ее там и затем делаете два слияния: 1.x
в 2.x
, затем 2.x
в default
(это вперед портирование ). Если вы попытаетесь сделать это наоборот, в default
(это обратное портирование ), вы не сможете объединить default
в 1.x
или 2.x
, потому что default
имеет много других вещей, которые не должны появляться в старой версии. Трудно идти против течения, поэтому вам придется перенести необходимые изменения обратно в 1.x
и 2.x
, что, скорее всего, не будет применяться чисто, и вы будете в основном делать то, что Mercurial может делать вручную. сделать для вас.
Вы можете взглянуть на макет репозитория Python, описанный в руководстве разработчика .