Mercurial, конфликт, слияние, дальнейшие конфликты позже, помнит ли Mercurial начальное разрешение? - PullRequest
5 голосов
/ 25 октября 2010

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

  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 для использования сторонней программы diff / merge? Будет ли это все еще применяться? Например, я настроил мою установку для использования Beyond Compare , будут ли предоставлены два файла (Боб с его изменениями и Алиса с ее изменениями + разрешение слияния) с присутствующим исходным разрешением или без него? Другими словами, если использовать Beyond Compare , то и здесь произойдет правильная вещь (при условии, что это вообще произойдет).

Ответы [ 2 ]

5 голосов
/ 25 октября 2010

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

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

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

2 голосов
/ 25 октября 2010

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

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

У нее уже есть ИЗМЕНЕНИЕ 1 от BOB, это в ее истории, поэтому она не будет пытаться изменить этот код снова. Это работает.

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