Почему `git diff ' не вызывает внешний инструмент diff?
В моем репозитории, если я наберу
$ git diff some-file
Или
$ git difftool some-file
Я получаю дисплей в терминале diff. Я думаю, что этого не должно произойти, потому что я настроил внешний инструмент diff, как показано на выходе git config -l:
$ git config -l
user.name=blah blah
user.email=blah blah
http.sslverify=true
diff.external=/home/daniel/bin/git-diff <--This is the important line
push.default=simple
core.filemode=false
core.editor=gedit
alias.tree=log --all --graph --decorate=short --color --format=format:'%C(bold blue)%h%C(reset) %C(auto)%d%C(reset)
%C(black)[%cr]%C(reset) %x09%C(black)%an: %s %C(reset)'
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=https://daniel@skynet/git/pyle.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.daniel.remote=origin
branch.daniel.merge=refs/heads/daniel
Файл git-diff, на который ссылается строка diff.external, выглядит следующим образом
#!/bin/bash
meld $2 $5
Почему git diff не вызывает meld?
Я получаю то же самое поведение, если я настраиваю вещи так, что git config -l имеет следующее строка:
diff.tool = meld
Или
diff.external = usr/bin/meld
Примечание : другие репозитории на моей машине не имеют этой проблемы.
Связанные, но не эквивалентные, поэтому вопросы:
3 ответов:
Я получаю дисплей в терминале diff. I этого не должно произойти, потому что я настроил внешний инструмент diff
Да, должно быть: diff.external - Это Для "in-terminal diff display".
(от
git configman page )diff.externalЕсли эта переменная конфигурации задана, тогенерация diff выполняется не с помощью внутреннего механизма diff, а с помощью данной команды .
Может быть переопределен с помощью средыGIT_EXTERNAL_DIFFпеременная.
Команда вызывается с параметрами, как описано в разделе "Git Diffs" в git(1). Примечание: Если вы хотите использовать внешнюю программу diff только для подмножества ваших файлов, вы можете использовать gitattributes(5) вместо этого.Вопрос, который вы связываете , объясняет, почему
meldне сможет играть роль "внешнего различия".Визуальный просмотр различий с помощью другого инструмента выполняется с помощью:
git difftool --dir-diff shaOfHisCheckIn^! git difftool --tool=meld --dir-diff shaOfHisCheckIn^! git difftool -t meld -d shaOfHisCheckIn^!
meldможет быть настроен на Windows как difftool: смотрите " git Diff и Meld на Windows".
Если вы хотите настроить meld для git diff, вы можете (на Ubuntu) использовать
diff.external, но со скриптом-оболочкой :Создайте файл с именем
git-diff.sh, используя следующее содержимое:#!/bin/bash meld "$2" "$5" > /dev/null 2>&1Сохраните его в таком месте, как
/usr/local/bin, предоставив ему права исполняемого файла:$ sudo mv git-diff.sh /usr/local/bin/ $ sudo chmod +x /usr/local/bin/git-diff.shПоследний шаг-открыть ваш файл
$HOME/.gitconfigи добавить следующее несколько строк:[diff] external = /usr/local/bin/git-diff.shВ следующий раз, когда вы введете git diff в проект Git с изменениями, Meld будет запущен, показывая вам средство просмотра различий с разделенной панелью.
Обратите внимание, что перед открытием следующего средства просмотра различий необходимо закрыть открытый экземпляр meld.
Похоже, что
git diff(по крайней мере, начиная с версииgit1.7.12.4) не будет запускать ничего, кроме внутреннего, консольного diff на файле, который находится в состоянии "оба модифицированы". Однакоgit mergetoolработает с такими файлами.
Обычно я просто хочу проверить, являются ли изменения, которые я собираюсь проверить, правильными. Поэтому я следовал процедуре, предложенной здесь (аналогичной той, которую отметил VonC). Однако запуск
git difftoolвсе еще не открыл meld. Затем я создал псевдоним:alias git-diff='git difftool $(git rev-parse HEAD)'Сохраните это в своем .bashrc или .zshrc или соответствующий конфигурационный файл для вашей оболочки. Это существенно сравнивает состояние ветви с предыдущей фиксацией на ветви.
Сделайте
git-diff, чтобы увидеть изменения в файле на файл basis илиgit-diff --dirдля просмотра всех изменений в представлении каталога.
Comments