Понимание изменений Mercurial слияния - PullRequest
2 голосов
/ 21 апреля 2011

Если у меня в репо две головы - C и D, у которых общий родительский элемент B - и я делаю hg merge, а затем hg commit, что именно входит в этот набор изменений слияния? Я пытаюсь понять, что я вижу, что я делаю hg diff -c xyz, где xyz - идентификатор объединенной ревизии.

Будет ли набор изменений отображать различия всех файлов, измененных в C и D, в зависимости от состояния этих файлов в том виде, в котором они существовали в общем родительском репозитории B?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

У фиксации слияния есть два родителя, поэтому при запуске diff важно понимать, против какого родительского элемента вы распространяетесь.

hg diff -c <changeset> показывает разницу набора изменений относительно первого родителя.

С hg help diff:

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

Для сравнения с конкретным родителем лучше всего предоставить явную ревизию как набора изменений слияния, так и родительского (например, hg diff -r <parent> -r <merge changeset>

).
2 голосов
/ 21 апреля 2011

Mercurial реализует направленный ациклический граф , поэтому в вашем наборе изменений слияния зависит от того, откуда вы пришли. Когда вы набираете «hg merge», он принимает «tip» (почти так же, как hg pull предполагает корневой репозиторий, из которого вы клонировали свою голову). Если вы наберете «hghead», вы можете увидеть, какой из них является подсказкой. Когда вы делаете это слияние, принимая C в качестве подсказки, вы сливаетесь с изменениями из D.

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