Невозможно найти файлы в двух разных ветках в Git - PullRequest
59 голосов
/ 27 мая 2009

У меня есть FileA в ответвлении A и FileB в ответвлении B.

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

Как вы можете различить по meld / FileMerge два файла ?


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

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


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

Ответы [ 4 ]

66 голосов
/ 27 мая 2009

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

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

prompt> git difftool somebranch:UNREADME otherbranch:README
61 голосов
/ 27 мая 2009

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 берет выходные данные вложенной команды, запускает их в конвейере и помещает путь к файлу конвейера в командной строке.

37 голосов
/ 27 мая 2009

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

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

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

1 голос
/ 27 мая 2009

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

# Our diff algorithm
[diff]
    external = opendiff
...