Ситуация
У нас есть 2 версии (1.0 и 2.0) проекта, обе активно поддерживаются. По сути, это один и тот же проект (в том, что касается изменений), но основанный на разных базовых версиях (base1.0 и base2.0). Все, что изменилось в 1.0, также должно быть перенесено в 2.0. То же самое касается base1.0 и base2.0.
В mercurial у нас есть 4 ветки: base1.0, 1.0, base2.0 и 2.0. Что-то вроде этого:
__2.0
__base2.0__/
/
__base1.0__/___1.0____________
Теперь каждый раз, когда мы что-то меняем в базовой версии, мы вносим изменения в base1.0 и выполняем слияние hg с base2.0. Здесь нет проблем.
Теперь, когда мы делаем то же самое для 1.0 и хотим объединить их в 2.0, нам также нужно повторно объединить всю ветку base1.0. в 2.0, хотя это уже было сделано при создании base2.0 из base1.0.
Вопрос
Каков наиболее эффективный способ решить эту проблему? У меня было несколько подходов:
- Объединить: как объяснялось выше, это вызывает много накладных расходов и необходимость повторного выполнения уже выполненной работы.
- graft, также известный как «выбор вишни»: выберите все изменения, которые мы делаем в 1.0, и перенесите их в 2.0 с помощью hg graft. Хотя в некоторых случаях он работает, он создает дубликаты наборов изменений, потому что портирует их 1:1. Я бы хотел, чтобы была одна фиксация, содержащая все обновления, сделанные на 1.0, перенесенные на 2.0.
- Экспорт различий: я также пытался экспортировать различия между исходным 1.0 и самым последним 1.0, а затем импортировать его в 2.0. Но это патч, а патчи - зло. И не очень удобный в обращении.
Есть идеи? Будучи относительно новым для всей концепции SCM, я просто хотел услышать, что другие делают в таких сценариях. Спасибо.