Невозможно разбить файлы в двух отдельных ветвях в 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