enter image description here

Я пытаюсь объединить эти два содержимого файла в новый файл. У меня уже есть левое и правое содержимое в виде объектов JSON с номерами строк и содержимым строк.

Например, я хочу выбрать левую часть и оставить правую часть в новом файле после слияния. Так как номера строк разные. Как мы будем добавлять левый контент из 214-й строки?

Все, что мне нужно, — это окончательный объект JSON, фиксирующий решения о слиянии с номерами строк. Как только я получу слияние JSON. Я буду использовать любой язык программирования для создания нового файла и этих изменений.

ПРИМЕЧАНИЕ. При слиянии я беру правильный файл в качестве основной ссылки. Я возьму копию правого файла и добавлю левое содержимое по мере выбора.

-1
murali Krishna 10 Апр 2020 в 17:46
1
Я не вижу никакого JSON на скриншоте выше. Как JSON появляется на этой картинке? Все, что я вижу, это XML. что ты уже испробовал?
 – 
Aleksey Tsalolikhin
10 Апр 2020 в 19:49
Содержимое файла не имеет значения. Хотя это файл xml, эта разница сохраняется в файле json с номером строки и содержимым строки. {left_content: [{line_number: 202, строка: "asdfhjasdf" } ]......
 – 
murali Krishna
14 Апр 2020 в 11:09

1 ответ

Как прокомментировал Алексей Цалолихин , то, что вы показываете, это XML, а не JSON (закодированный в текст). Это не так уж и важно: оба просто предоставляют средства кодирования данных с древовидной структурой.

Git не понимает ничего из этого. Код слияния Git обрабатывает файлы как строки (текста). Это нормально, поскольку вы планируете выполнить слияние самостоятельно (с помощью кода, вручную или как-то еще).

Обратите внимание, что сравнение или слияние данных с древовидной структурой, независимо от их кодировки, по своей сути является сложным. Он не должен использовать номера строк. Вероятно, он должен проверять, совпадают ли поддеревья, и если да, считать их перемещенными, даже если они изменили глубину.

Если вы выполнили слияние самостоятельно и результат должен быть закодирован в тексте, закодируйте его в текст и вставьте туда, куда он идет, и отдайте Git результат в виде текстового файла. Все, что нужно git merge, — это окончательный текстовый файл. Входными данными для слияния были три текстовых файла — один из базового коммита слияния, второй из текущего коммита и третий из другого коммита, который объединяется, — и Git нужен новый текст файл.

Итак, возьмите результат слияния, закодируйте его как текст, и все готово: запишите его в соответствующий файл (или соответствующую часть соответствующего файла) и сообщите Git это правильный результат слияния. Другими словами, запишите результат и запустите git add path/to/file.

ПРИМЕЧАНИЕ. При слиянии я беру правильный файл в качестве основной ссылки. Я возьму копию правого файла и добавлю левое содержимое по мере выбора.

Для слияния есть три входа. Нет "левых" и "правых": есть база слияния, наша и их. Дельта от базы до нашей показывает, что мы изменили. Дельта от основания до их представляет то, что они изменили. Ваша задача — объединить эти изменения.

1
torek 11 Апр 2020 в 01:27
Спасибо за объяснение. Я сравниваю два случайных файла без индекса. (git --no-index файл1 файл2), и полученный унифицированный вывод анализируется и преобразуется в структуру JSON. { {left_content : [{linenumber: "202", line: "jkhfkajsdfh", changeType: "ADDED"}], right_content: [{linenumber: "215", line: "hkajsdfhkajs", changeType: "ADDED"}] } ) Я хочу объединить левый и правый контент. Я знаю, что это странный подход к вычислению разницы и объединению двух файлов. Если доступен какой-либо лучший подход, чтобы найти различия и объединить их. Пожалуйста, поделитесь ими.
 – 
murali Krishna
14 Апр 2020 в 11:14
Взять один diff и что-то с ним сделать — это не объединить, а просто применить diff. Пожалуйста, не называйте это слиянием....
 – 
torek
14 Апр 2020 в 11:25
Хорошо. Я буду называть это применением diff. Я имел в виду, что создам копию правой стороны и применю различия, и окончательный результат будет объединен с обоими. Левая или правая версия выбирается из пользовательского интерфейса, который я предоставлю позже.
 – 
murali Krishna
14 Апр 2020 в 11:40