Почему `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


Примечание : другие репозитории на моей машине не имеют этой проблемы.



Связанные, но не эквивалентные, поэтому вопросы:





  1. В чем разница между git diff и git difftool?


  2. не могу заставить git diff использовать diff.external for external diff tool

750   3  

3 ответов:

Я получаю дисплей в терминале diff. I этого не должно произойти, потому что я настроил внешний инструмент diff

Да, должно быть: diff.external - Это Для "in-terminal diff display".

(от git config man 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 (по крайней мере, начиная с версии git 1.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

    Ничего не найдено.