git merge-file помечает весь файл как отдельный, а не разделы - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь использовать 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


1 Ответ

2 голосов
/ 24 мая 2019

проверить с файлом:

git show HEAD:a-file > a.txt
git show $1:a-file > b.txt # replace $1 for the revision you are playing with
git show $( git merge-base HEAD $1 ):a-file > c.txt

Используйте для них файл (file a.txt b.txt c.txt) и проверьте, какое значение у каждого из них, чтобы увидеть, все ли они в одном формате (CRLF или LF) или они меняются между CRLF и LF ... или вы можете открыть все 3 в приличном текстовом редакторе, который может показать вам формат (unix / windows). Если они смешаны, вот почему вы видите эту проблему.

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