Невозможно разбить файлы в двух отдельных ветвях в Git

У меня есть FileA в branchA и FileB в ветке B.

Проблема заключается в том, что я могу получить доступ только к одному файлу во время. Я хотел бы иметь возможность сравнивать файлы с помощью FileMerge или meld, так как они являются единственными diffTools, которые я нашел для Mac.

Как вы можете сопоставить файлы meld/FileMerge с двумя файлами?


[Решено]: 1-я разработанная проблема: FileMerge не разрешает стандартный ввод

Маси: Вы можете использовать opendiff, чтобы FileMerge имел файлы со стандартного ввода. Итак, следующая проблема заключается в том, чтобы найти способ git diff использовать opendiff.


2-я разработанная проблема:, чтобы сделать инструмент git diff для использования opendiff в Mac

Ответ 1

Вы можете использовать " git mergetool" для слияния и в современном git (что означает версия 1.6.3 и более поздняя) " git difftool" для сравнения с использованием графических инструментов. Конечно, сначала вам нужно будет их настроить, но они делают некоторое автоматическое определение (с определенными жестко настроенными предпочтениями, конечно), и если я правильно помню поддержку opendiff, она встроена.

И тогда, конечно, вы сможете использовать свой графический инструмент (opendiff/FileMerge), поскольку вы бы использовали обычный "git diff", например

prompt> git difftool somebranch:UNREADME otherbranch:README

Ответ 2

git поддерживает имена ветвей как часть путей репозитория. Например, если в вашем репозитории имеются следующие файлы, README только на master и UNREADME только на branch:

master:README

branch:UNREADME

Вы можете разделить их через git с помощью:

git diff branch:UNREADME master:README

Вы можете получить артефакт репозитория до стандартного вывода с помощью git show:

git show branch1:UNREADME

Итак, если ваша внешняя утилита diff может принимать 2 файла в приглашении bash, вы можете разделить их на что-то вроде:

diff-command <(git show branch1:UNREADME) <(git show master:README)

Где синтаксис <(...) bash принимает вывод прилагаемой команды, запускает его в трубе и помещает путь к файлу в командной строке.

Ответ 3

Если вы в настоящее время выходите на ветку, например, вы можете использовать команду:

git diff branchB path/to/common/file/between/branches.txt

Затем вы можете отредактировать diff, если хотите подмножество изменений, или оставить его как есть, и git apply diff как патч. Что касается GUI-инструмента, который делает это, надеюсь, у кого-то будет предложение.

Ответ 4

Из docs вам нужно что-то похожее на следующее в вашем файле .git/config:

# Our diff algorithm
[diff]
    external = opendiff