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

StackOverflow https://stackoverflow.com/questions/4016639

Вопрос

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

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

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

(цифры после «ИЗМЕНИТЬ» означают, что человек изменил «часть 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 на использование сторонней программы сравнения/слияния?Будет ли это по-прежнему применяться?Например, я настроил свою установку на использование Вне всякого сравнения, будут ли два файла (Боба только с его изменениями и Алисы с ее изменениями + разрешение слияния) предоставлены с первоначальным разрешением или без него?Другими словами, если использовать Вне всякого сравнения, произойдет ли и здесь правильная вещь (при условии, что она вообще произойдет.)

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top