Mercurial, конфликт, слияние, дальнейшие конфликты позже, помнит ли Mercurial первоначальное разрешение?

Представьте себе этот сценарий:

  1. Алиса и Боб клонируют центральный главный репозиторий Mercurial, содержащий 1 текстовый файл.
  2. И Алиса, и Боб вносят изменения в одну и ту же строку в файле и фиксируют
  3. Боб возвращается к центральному хранилищу, но не к Алисе.
  4. Алиса заходит в свой репозиторий, замечает, что теперь у нее две головы, и объединяет
  5. Поскольку слияние является конфликтом, она разрешает конфликт
  6. Затем Алиса фиксирует, но не отправляет
  7. Теперь Боб вносит дальнейшие изменения в файл в каком-то другом местоположении файла (т. е. нигде рядом с первоначальными изменениями), фиксирует и отправляет
  8. Алиса в своем объединенном файле делает аналогичное изменение в том же месте, которое только что изменил Боб, и фиксирует
  9. Алиса тянет и, обнаружив еще одно двуглавое хранилище, объединяет

Вот другой взгляд на приведенный выше сценарий

(цифры после "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, здесь тоже все будет правильно (при условии, что это вообще произойдет).


person Lasse V. Karlsen    schedule 25.10.2010    source источник


Ответы (2)


Mercurial потребует только разрешения последнего конфликта, и это прекрасно работает с внешними инструментами изменений.

Когда Алиса выполняет свое второе слияние, она объединяет свое предыдущее слияние с новой дельтой Боба, и только это изменение нужно интегрировать заново.

Действительно четкая схема, кстати. Спасибо

person Ry4an Brase    schedule 25.10.2010
comment
Хорошо, значит, этот сценарий вообще не вызовет проблем, не будет ли все сложнее объединять изменения в загруженных файлах? - person Lasse V. Karlsen; 25.10.2010
comment
@ Лассе В. Карлсен совсем нет. - person msarchet; 25.10.2010
comment
Да, вполне нормальный рабочий процесс. В идеале Боб лучше справляется со своей справедливой долей извлечения и слияния, но когда bob является внешним, вышестоящим проектом, это не всегда возможно. Работает отлично. - person Ry4an Brase; 25.10.2010

Он только попросит Алису изменить последний конфликт.

Причина этого в следующем:

У нее уже есть CHANGE 1 от BOB, это в ее истории, поэтому он не будет пытаться снова изменить этот код. Оно работает.

person msarchet    schedule 25.10.2010