Представьте себе этот сценарий:
- Алиса и Боб оба клонируют центральное главное хранилище Mercurial, содержащее 1 текстовый файл
- Алиса и Боб вносят изменения в одну и ту же строку в файле и фиксируют
- Боб толкает обратно в центральное хранилище, но не Алису
- Алиса теперь тянет в свой репозиторий, замечает, что у нее теперь две головы, и сливается
- Поскольку слияние является конфликтом, она разрешает конфликт
- Алиса затем фиксирует, но не нажимает
- Боб теперь делает дальнейшие изменения в файле, в другом месте файла (т. Е. Рядом с первоначальными изменениями), фиксирует и нажимает
- Алиса в своем объединенном файле делает подобное изменение в том же месте, которое только что изменил Боб, и фиксирует
- Алиса тянет, и, обнаружив еще одно двуглавое хранилище, она сливается
Вот другой взгляд на вышеприведенный сценарий
(цифры после «ИЗМЕНЕНИЯ» означают, что пользователь изменил «часть X» файла. Если оба пользователя изменили одну и ту же часть, у нас впереди конфликт слияния, если они изменились по-разному, не так сильно)
Alice Bob
CLONE MASTER CLONE MASTER
-----------------------------------------
CHANGE 1 <-----+
COMMIT +-- upcoming merge conflict
----------------------------------------- |
CHANGE 1 <-----+
COMMIT
PUSH
-----------------------------------------
PULL <-- Bob's change +1 head
MERGE <-- Attempt to get rid of extra head
RESOLVE CONFLICT <-- Resolve merge conflict
COMMIT
-----------------------------------------
CHANGE 2 <-----+
COMMIT +-- yet another merge
PUSH | conflict ahead
----------------------------------------- |
CHANGE 2 <-----+
COMMIT
PULL <-- Bob's change, again +1 head
MERGE <-- Attempt to get rid of extra head
RESOLVE ???
На данный момент мой вопрос таков:
- Будут ли инструменты слияния учитывать первое разрешение слияния? Поскольку Боб никогда не извлекал изменения Алисы, в его копии по-прежнему отсутствуют какие-либо изменения, сделанные Алисой, ее первоначальное изменение (которое противоречило Бобу), ее слияние и ее последнее изменение, которое противоречит последним изменениям Боба. .
Если бы я просто взял версию файла Боба и версию файла Алисы и передал любой программе слияния, он пометил бы оба изменения как конфликтующие.
Другими словами, попытается ли инструмент конфликта попросить Алису разрешить как исходный, так и новый конфликт, или только последний?
Я предполагаю ( Я не пробовал этого, все еще пытаюсь создать какой-то тестовый скрипт для проверки этой проблемы ), что Mercurial будет только просить Алису разрешить последний конфликт.
Что если я настрою Mercurial для использования сторонней программы diff / merge? Будет ли это все еще применяться? Например, я настроил мою установку для использования Beyond Compare , будут ли предоставлены два файла (Боб с его изменениями и Алиса с ее изменениями + разрешение слияния) с присутствующим исходным разрешением или без него? Другими словами, если использовать Beyond Compare , то и здесь произойдет правильная вещь (при условии, что это вообще произойдет).