Проблема git difftool: не заданы МЕСТНЫЕ, УДАЛЕННЫЕ переменные

В соответствии с doc и различными ответами здесь git difftool будет вызывать указанный исполняемый файл (обычно скрипт оболочки) с переменными окружения LOCAL и REMOTE, установленными в пути к файлам. Но когда я пытаюсь, LOCAL и REMOTE не установлены. Я попробовал следующий тест:

git config --global diff.tool mytest  
git config --global difftool.mytest.cmd mytest.sh  
git config --global difftool.prompt false  

с mytest.sh:

#!/bin/sh  
echo "LOCAL:$LOCAL REMOTE:$REMOTE"  

ссылающееся:

git difftool --tool mytest <commitid> -- <path-to-file>  

выход:

LOCAL: REMOTE:  

Какие-либо предложения?

2 ответа

Решение

Страница man означает, что difftool..cmd может иметь $LOCAL а также $REMOTE в его командной строке. Они будут заменены соответствующими путями к файлам. Не предполагается, что эти переменные экспортируются в вашу среду.

Чтобы продемонстрировать на примере, вот переделанная версия вашей первоначальной настройки.

git config --global diff.tool mytest  
git config --global difftool.mytest.cmd 'mytest.sh $LOCAL $REMOTE'
git config --global difftool.prompt false

Это оболочка diff, которую я всегда использовал (с tkdiff):

#!/bin/sh

# diff is called with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode

tkdiff "$2" "$5"

Который использует параметры, а не $LOCAL а также $REMOTE,

Другие вопросы по тегам