mercurial: применить исправление ошибки из стабильной именованной ветви в ветку dev - PullRequest
6 голосов
/ 23 августа 2011

у меня есть эти две названные ветви в моем репо.Стабильный и дев.Мой вопрос: как мне скопировать патч исправления ошибок, который был изменен в стабильной ветке dev?Я действительно хотел бы сделать это в рамках, а не с каким-либо расширением:)

РЕДАКТИРОВАТЬ

Я назначил награду за вопрос, потому что я действительно хотел решения.Было хорошее решение, но его оставили на полпути.Так что у меня не было другого выбора.Теперь, кажется, ответили.Но я оставлю вопрос справедливым в другой день, на случай, если у кого-то найдется лучшее решение.Надеюсь, что это имеет смысл.:)

Ответы [ 3 ]

10 голосов
/ 24 августа 2011

Для увеличения Ответ Тима , другой способ подойти к нему - это то, как Mercurial рекомендует вам сделать это, если вы можете, планируйте заранее (я посмотрю, смогу ли я подтолкнуть ссылку.)

План состоит в том, что если вы знаете, что исправление / изменение должно происходить в нескольких ветвях, вы не вносите этот набор изменений в одно из этих мест для начала, вы делаете это где-то еще.

Поскольку вы исправляете ошибку, где-то в истории проекта эта ошибка была введена.

И поскольку исправление должно входить более чем в одну ветку, это «где-то» должно быть перед точкой, в которой вы разветвились, иначе ошибка не была бы в обеих (/ всех) ветвях.

Итак, рекомендуемый способ - исправить ошибку, в которой она была представлена, и затем объединить этот набор изменений в каждую из ветвей, которые в ней нуждаются.

Давайте рассмотрим пример, у нас есть default и stable ответвления:

1---2---3---4---5---6---7---8---9---10       default
         \               \
          \               \
           11--------------12--13            stable

Затем вы обнаружите, что в changeset 2 появилась ошибка, и исправление необходимо применить к default и stable. То, как вы описываете это в вопросе, похоже, что вы сделали бы это:

1---2---3---4---5---6---7---8---9---10--15       default
         \               \             /^-- merge stable into default
          \               \           /
           11--------------12--13----14          stable
                                     ^-- bugfix

Но это также объединит набор изменений 13 в default. Если вы не хотите, чтобы это произошло, вместо этого вы должны сделать следующее:

       v-- bugfix
       14--------------------------+--+
      /                            |   \
     /                             |    \
1---2---3---4---5---6---7---8---9--x-10--15       default
         \               \         |     ^-- merge 14 into default
          \               \        |
           11--------------12--13--16             stable
                                   ^-- merge 14 into stable

Для получения дополнительной информации о том, как использовать Mercurial в сценариях исправления ошибок, 9-я глава 'Mercurial: Полное руководство' стоит прочитать.

5 голосов
/ 23 августа 2011

Если ваша ветвь dev является потомком вашей "стабильной именованной ветки", то вы можете просто

hg update dev
hg merge stable

Если это невозможно, то самый естественный ответ - расширение transplant . Это расширение распространяется вместе с Mercurial, поэтому вам нужно всего лишь добавить одну строку в mercurial.ini или .hgrc, чтобы включить его. Включив его, вы можете:

hg update dev
hg transplant --log <rev>

Если вы действительно хотите избежать использования расширения, вы можете использовать export и import:

hg export --rev <rev> > tmp.patch
hg update dev
hg import tmp.patch
0 голосов
/ 23 сентября 2011

Расширение для пересадки сделайте свое дело - и именно то, что вы хотите

...