Рабочий процесс для "обратного переноса" меняется на другую ветку 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 -

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

Другие вопросы по тегам