Почему отказ Mercurial в одной ветке влияет на другие ветки?

Это сложная ситуация для объяснения, так что потерпите меня. У меня есть репозиторий Mercurial с двумя основными ветвями: по умолчанию и dev .

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

Когда приходит время готовить релиз, создается другая именованная ветка из dev (ветка релиза). Иногда необходимо исключить из выпуска все функции. В этом случае набор изменений слияния, из которого ветвь функций была объединена с dev , откатывается из ветки нового выпуска.

Когда ветвь выпуска готова к выпуску, она объединяется в default (поэтому default всегда представляет состояние кода в производстве). Работа над веткой dev и ветвями функций продолжается в обычном режиме.

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

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

Если все вышеперечисленное сложно сделать следуйте, вот скриншот от TortoiseHg, который показывает основную проблему. «branch1» и «branch2» - это функциональные ветки, «release» и «release2» - это ветки выпуска:

enter image description here

15
задан Martin Geisler 29 February 2012 в 15:20
поделиться