Понимание направления потока изменения 3-стороннего слияния Meld - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь выполнить 3-х стороннее слияние для фиксации, выбранной из вишни, используя Meld. Однако мне трудно понять направления, в которых текут изменения между 3 файлами, показанными Meld. Для лучшей иллюстрации рассмотрим следующий случай:

В главной ветке при фиксации 4e623e0 у нас есть отслеживаемый файл с именем test. c, и он выглядит так:

#include <stdio.h>

int main()
{
        printf("Hello world!\n");
        return 0;
}

Мы создаем ветку 'other' и фиксируем изменения в test. c, поэтому ветка other находится на фиксации 29771b0, а файл test. c выглядит так:

#include <stdio.h>
#include "foo.h"
#include "headerx.h"
#include "headery.h"
#include "headerz.h"

int main()
{
        printf("Hello world!\n");
        if (x(2) > x(3))
                return -1; 
        else if (z(2) > z(3))
                return 44; 
        return 0;
}

Теперь мы go возвращаемся к ветке 'master' и фиксируем изменения для test. c, поэтому мастер ветки находится на фиксации 02fd8c8, а файл test. c выглядит так:

include <stdio.h>
#include "foo.h"
#include "bar.h"

int main()
{
        printf("Hello world!\n");
        return bar_fun(2);
}

Наконец, в основной ветке мы пытаемся выполнить

git cherry-pick 29771b0
git mergetool

, и появляется следующее окно: enter image description here

Мой вопрос:

  1. Какой смысл имеет отмеченная стрелка, указывающая на «ЛОКАЛЬНЫЙ» файл?
  2. Как я могу отключить эту «функцию» (ошибка?)? Это довольно неприятно при слиянии больших файлов, когда Meld помечает большой блок кода "BASE" и хочет sh поместить его в файл "LOCAL".
  3. Если это имеет смысл - зачем Хочу поменять, "ЛОКАЛЬНЫЙ" файл? Согласно этому сообщению SO: Какая версия файла git будет окончательно использована: LOCAL, BASE или REMOTE? , панель «LOCAL» должна быть открыта в режиме только для чтения. У меня есть приблизительное представление о файлах "LOCAL", "REMOTE", "BASE" и "MERGED", однако рассматриваемый вариант Meld для меня не имеет смысла.

1 Ответ

0 голосов
/ 26 мая 2020

Вишня - интересная ситуация для конфликта. ЛОКАЛЬНЫЙ (левая панель) - это код той ревизии, в которой вы находитесь (другими словами: HEAD ). Теперь местные и УДАЛЕННЫЙ имеют особое значение. При нормальном конфликте при слиянии этот интерфейс (я полагаю, я этого не знаю) покажет вам подсказку другой ветки на правой панели и код, который находится на (примерно) последнем общем предке в центральная панель, где вы можете редактировать способ, как файл будет выглядеть, и прочее.

На первый взгляд, то, что показывают эти два раздела, немного отличается (на самом деле, это то же самое, но разные вид слияния). Панель REMOTE (правая панель) покажет вам код, как он находится в ревизии, которую вы выбираете (вот почему у вас есть ifs, как на ветке other ) .... средняя панель - это код, который отображается в родительском ревизии, которую вы выбираете (поэтому он показывает код так, как он выглядел в первой ревизии).

...