новичок - проблема слияния - PullRequest
1 голос
/ 23 августа 2010

Внесены изменения в файл X.java - через hg repo explorer я вижу свои изменения.

Совершенные изменения в X.java для локального репозитория

Я извлек изменения из центрального репо, которые также включали неконфликтующие изменения другого разработчика в X.java - я вижу изменения, сделанные в X.java другим разработчиком.

Я объединил две версии локально,

После слияния я вижу, что изменения, сделанные другим разработчиком, теряются (!) Только для этого файла, и файл после слияния совпадает с тем, что я зафиксировал до слияния. Все остальные файлы, которые были изменены только другими, не повреждены.

Я не уверен, почему слияние отменило изменения других разработчиков, я обнаружил, что это произошло со всеми файлами, которые оба разработчика изменили, слили и зафиксировали.

Я использую черепаху hg для всех ртутных задач.

Может кто-нибудь помочь мне понять, что происходит?

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

Большое спасибо,

** Обновление добавлено из комментария **

Я думаю, поскольку изменения, внесенные в этот файл, не противоречили друг другу, я не думаю, что Mercurial запустил какой-либо инструмент или Kdiff или попросил меня выбрать вручную. Я думаю, что это само по себе. Если вообще, в чем я не уверен на 100%, mercurial мог пометить файл как «U» (неразрешенный), что после проверки неконфликтующих изменений, я мог бы выбрать опцию «Пометить конфликт как разрешенный». Я помню, как делал это для пары файлов, не уверен, что сделал это в этом случае. поэтому есть только две возможности: 1. Mercurial мог бы автоматически объединиться без моего вмешательства. 2. Возможно, я выбрал опцию «Пометить как разрешенную». - AlwaysLearning

1 Ответ

2 голосов
/ 24 августа 2010

Mercurial выполнит предварительное слияние, когда вы попросите его слить, но при этом он очень консервативен и, конечно, не оставит код на полу, поэтому он не "автоматически объединяется" "это для тебя.

Ваше второе действие 'пометить как решенное' будет идеально описывать результаты, которые вы получаете. Использование метки в качестве разрешения (hg resolve --mark из командной строки) говорит mercurial: «Рабочая копия на диске является идеальным сочетанием этих двух файлов и должна быть тем, что продвигается в наборе изменений слияния». Если вы сделаете это до фактического слияния этих файлов, у вас не останется ничего, кроме левого родителя слияния в результирующем файле, что снова будет похоже на то, что у вас есть.

К счастью, вы всегда можете заново выполнить слияние:

hg update -r leftParentRevisionId
hg merge rightParentRevisionId
..do your manual merges as necessary.
hg commit -m 'merged left and right'

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

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

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