Я пытаюсь использовать git merge-file
для трехстороннего слияния двух ветвей (current
и other
), которые давным-давно расходились файл за файлом.Я выбрал этот подход, потому что выполнение git merge
привело бы к слишком большому количеству конфликтов и превратило бы его в кошмар, в то время как работа с файлами по файловым базам не будет сильно ломать все, и обновление всех тестов по мере выполнения изменений будетбудет проще.
Идея состоит в том, чтобы использовать этот сценарий, который принимает имя ветви, имя файла и выполняет объединение, используя последнюю версию файла в текущей ветви, версию с точки расхождения иверсия из последнего коммита в другой ветке.
Проблема в том, что вместо выделения только разделов, которые отличаются, эта команда просто говорит, что весь файл расходится, даже если в действительности только несколько строк отличаются,Что я здесь не так делаю?
#!/bin/bash
common_sha=$(git merge-base HEAD $1)
git show $common_sha:$2 > common
git show $1:$2 > theirs
git merge-file --diff3 $2 common theirs
rm common
rm theirs
Вот пример используемого скрипта:
$ git branch -a
* current_branch
master
other_branch
$ my_merge.sh other_branch file.txt
Вот файлы, которые он использовал
common version of file.txt
line 1
line 2
line 3
line 4
line 5
current branch's version of file.txt
line 1
line 2.2
line 3
line 4.1
line 6
other branch's version of file.txt
line 1
line 2.1
line 2.2
line 3
line 4
line 5
И ожидаемый против фактического результата
expected result after running the script
line 1
<<<<<<< file.txt
line 2.2
||||||| common
line 2
=======
line 2.1
line 2.2
>>>>>>> theirs
line 3
line 4.1
line 6
actual result
<<<<<<< file.txt
line 1
line 2.2
line 3
line 4.1
line 6
||||||| common
line 1
line 2
line 3
line 4
line 5
=======
line 1
line 2.1
line 2.2
line 3
line 4
line 5
>>>>>>> theirs