Рабочий процесс для "обратного переноса" меняется на другую ветку Mercurial (Hg)?
У нас две головы. Один - наш главный руководитель по разработке, а другой - тот, о котором я забыл до сегодняшнего дня. Мы нашли ошибку и исправили ее в нашей основной ветке разработки, и я только что понял, что она должна быть исправлена и в старой ветке.
Я думаю, что было бы лучше внести изменения в более старую ветку и объединить их с современной веткой, но мы не сделали этого таким образом. Может ли Mercurial справиться с этим? Мы не пытались делать что-то подобное, и я не могу понять, как это будет сделано.
1 ответ
Да, у вас есть два хороших варианта:
Прививка: новое в Mercurial 2.0
В этой версии была введена команда graft, которая может интеллектуально передавать изменения в журнал. "Интеллект" заключается в том, что он будет использовать слияния внутри, и это означает, что вы получите
Поддержка переименований: представьте, что вы исправили ошибку в файле
foo.c
на ветке разработки. В старой ветке обслуживанияfoo.c
называлсяbar.c
, С помощьюhg graft
изменение наfoo.c
можно правильно слить в староеbar.c
,Трехстороннее слияние: прививка включает в себя вращение графа и слияние во временном графе. Преимущество трехсторонних слияний заключается в том, что вы можете использовать обычный графический инструмент слияния для разрешения конфликтов.
Скопировать кончик default
на old-branch
ты просто бежишь
$ hg update old-branch
$ hg graft default
Пересадка: старые версии
До того, как мы получили команду на пересадку, необходимо было продлить пересадку. Это простое расширение будет экспортировать набор изменений в виде патча и попытаться применить патч к другой ревизии.
Поскольку мы имеем дело с "тупыми" патчами, такие вещи, как переименования, не будут приниматься во внимание, и вы не получите поддержку своего инструмента слияния, поскольку нет трехстороннего слияния. Несмотря на это, я обнаружил, что трансплантация работает очень хорошо на практике.
Использовать трансплантат просто:
$ hg update old-branch
$ hg transplant default
Это очень близко к бегу
$ hg update old-branch
$ hg export default | hg import -
за исключением того, что трансплантат также добавляет часть метаданных, которые записывают исходный набор изменений в трансплантированный набор изменений. Это может использоваться, чтобы пропустить будущие пересадки.