Подвижный: как я могу видеть только изменения, представленные слиянием?

Я пытаюсь привыкнуть делать обзоры кода, но слияния делали процесс трудным, потому что я не знаю, как попросить Подвижный "показывать только изменения, представленные слиянием, которые не присутствовали ни в одном из его родителей".

Или, немного более официально (благодаря Steve Losh):

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

Например, предположите, что у меня есть репозиторий с двумя файлами, a и b. Если "a" изменяется в пересмотре 1, "b" изменяется в пересмотре 2 (который находится на отдельном ответвлении), и эти два изменения объединяются в пересмотре 3, я получу историю, которая похожа на это:

    @    changeset:   3
    |\   summary:     Merged.
    | |
    | o  changeset:   2
    | |  summary:     Changing b
    | |
    o |  changeset:   1
    |/   summary:     Changing a
    |
    o  changeset:   0
       summary:     Adding a and b

Но если я прошу видеть изменения, представленные пересмотром 3, hg di -c 3, Подвижный покажет мне то же самое, как будто я попросил видеть изменения, представленные в пересмотре 1, hg di -c 1:

    $ hg di -c 3
    --- a/a     
    +++ b/a     
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a
    $ hg di -c 1
    --- a/a     
    +++ b/a     
    @@ -1,1 +1,1 @@ 
    -a 
    +Change to a

Но, очевидно, это не очень полезно - вместо этого, я хотел бы быть сказанным, что никакие новые изменения не были представлены пересмотром 3 (или, если бы был конфликт во время слияния, то я хотел бы видеть только разрешение к тому конфликту). Что-то как:

    $ hg di -c 3
    $

Так, как я могу сделать это?

PS: Я знаю, что могу сократить количество слияний в моем использовании репозитория rebase…, Но это не моя проблема - моя проблема выясняет то, что было изменено со слиянием.

22
задан David Wolever 17 December 2009 в 03:32
поделиться

1 ответ

Краткий ответ: вы не можете сделать это с помощью стандартной команды Mercurial.

Выполнение hg diff -c 3 покажет вам изменения между 3 и его первым родителем, то есть набором изменений, который вы использовали, когда запускали hg merge .

Это имеет смысл, если вы думаете о ветвях как о большем количестве чем просто набор изменений. Когда вы запускаете hg up 1 && hg merge 2 , вы говорите Mercurial: «Слить ревизию 2 в ревизию 1 ».

Это более очевидно, если ты' повторно используют именованные ветви. Скажем, набор изменений 2 в вашем примере находился в именованной ветке с именем rewrite-ui . Когда вы запускаете hg update 1 && hg merge rewrite-ui , вы фактически говорите: «Объедините все изменения в ветке rewrite-ui в текущую ветку». Когда вы позже запустите hg diff -c в этом наборе изменений, он покажет вам все, что было введено в ветку по умолчанию (или любую другую ветвь 1 , которая находится в) путем слияния, что имеет смысл.

Однако из вашего вопроса похоже, что вы ищете способ сказать:

Покажите мне каждый кусок в этом наборе изменений, которого не было ни в одном из его родителей , и покажите мне каждый кусок, присутствующий в любом из его родителей, который не t также присутствует в 3 .

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

12
ответ дан 29 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: