Представьте себе этот сценарий:
- Алиса и Боб клонируют центральный главный репозиторий Mercurial, содержащий 1 текстовый файл.
- И Алиса, и Боб вносят изменения в одну и ту же строку в файле и фиксируют
- Боб возвращается к центральному хранилищу, но не к Алисе.
- Алиса заходит в свой репозиторий, замечает, что теперь у нее две головы, и объединяет
- Поскольку слияние является конфликтом, она разрешает конфликт
- Затем Алиса фиксирует, но не отправляет
- Теперь Боб вносит дальнейшие изменения в файл в каком-то другом местоположении файла (т. е. нигде рядом с первоначальными изменениями), фиксирует и отправляет
- Алиса в своем объединенном файле делает аналогичное изменение в том же месте, которое только что изменил Боб, и фиксирует
- Алиса тянет и, обнаружив еще одно двуглавое хранилище, объединяет
Вот другой взгляд на приведенный выше сценарий
(цифры после "CHANGE" означают, что человек изменил "часть 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 для использования сторонней программы сравнения/слияния? Будет ли это по-прежнему применяться? Например, я настроил свою установку на использование Beyond Compare, будут ли два файла (Боба только с его изменениями и Алиса с ее изменениями + разрешение слияния) должны быть даны с первоначальным разрешением или без него? Другими словами, если вы используете Beyond Compare, здесь тоже все будет правильно (при условии, что это вообще произойдет).