Почему набор изменений Mercurial Merge содержит элементы без конфликтов? - PullRequest
2 голосов
/ 04 июня 2011

С учетом этого хранилища:

A1 - A2 - A3 - A4 - A5

.. вы делаете hg pull, который извлекает еще две ревизии из удаленного репо, давая вам две головы:

A1 - A2 - A3 - A4 - A5
        \
          B3 - B4

Допустим, вы делаете hg merge, что дает вам M1 набор изменений слияния :

A1 - A2 - A3 - A4 - A5----\
        \                   M1
          B3 - B4 --------/

Так что теперь hg out будет перечислять M1 ...

Если вы сделаете hg diff -c M1, вы увидите:

  • Файлы, которые были добавлены в B3 и B4
  • Различия для файлов, которые были изменены в B3 и B4, для которых не было конфликтов (файлы не были изменены в A3-A5)

Почему набор изменений слияния M1 включает эти элементы? И почему вам нужно отправить эту ревизию в удаленный репозиторий?

Эти изменения уже есть в B3 и B4, которые находятся в удаленном хранилище. Я понимаю, почему набор изменений слияния должен включать файлы, которые имели изменения как в A3-A5, так и в B3-B4 и привели к новой объединенной версии файлов. Но я не понимаю, почему в набор изменений входят элементы, в которых нет конфликтов. Не будет ли толчок повторяющихся изменений M3, которые уже есть в удаленном репо?

Ответы [ 2 ]

5 голосов
/ 04 июня 2011

Проще всего сказать, что B3 и B4 имеют A2 в качестве основы, на которой строятся их изменения. Чтобы вернуть все обратно к 1 голове вместо 2, объединение представляет собой набор изменений, который берет все изменения в B3 и B4 и применяет их поверх A5.

Другая часть причины, по которой это выглядит так, это то, что вы были на A5, когда вы объединили B4. Если бы вы были на B4 и слились, слияние показывало бы изменения A3, A4 и A5 поверх B4 (вы были бы на B4, когда вы позвонили hg diff -c M1).

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

1 голос
/ 07 июня 2011

diff -c только создает разность между набором изменений и его первым (левым) родителем (A5 в вашем случае).Таким образом, он показывает все, что изменилось в вашей ветке из-за слияния с удаленного.

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