ОБНОВЛЕНИЕ: Если, как и ОП, вы хотите, чтобы git difftool
вызывал функцию сравнения по умолчанию вместо внешнего инструмента, тогда работает простая версия в конце этого ответа.Однако метод, который я предпочитаю и рекомендую, если вам нужны только несколько инструментов сравнения, - это метод файла .gitconfig, описанный в Ответ DrStrangeprok.
В качестве вашеговнешний инструмент для редактирования.(то есть: заменить содержимое extDiff на него)Это не так просто, как git diif1 / git diff2, но работает.РЕДАКТИРОВАТЬ: см внизу для более простой версии
#!/bin/bash
# Parameters from git:
# 1 2 3 4 5 6 7
# path old-file old-hex old-mode new-file new-hex new-mode
CONTINUE=1
while [ $CONTINUE == 1 ]
do
# Present Options
echo "1. P4Merge"
echo "2. Unix diff"
echo "3. Cancel"
echo -n "Choose diff tool[1]: "
# Read in user choice
read -n 1 OPTION
# move down a line
echo ""
# if user didn't enter a choice default to 1
if [[ $OPTION == "" ]] ; then
OPTION="1"
fi
# Launch diff tool based on OPTION
case $OPTION in
1) /Applications/p4merge.app/Contents/MacOS/p4merge "$2" "$5" ; CONTINUE=0 ;;
2) diff "$2" "$5" ; CONTINUE=0 ;;
3) exit ;;
*) echo "\"$OPTION\" is not valid " ;;
esac
# This sleep has two purposes
# 1) on an invalid choice it delays the menu just a hair
# 2) keeps this script alive long enough that git will not just move onto the next file
# instantly if diffing multiple files.
sleep 1
done
Простая версия без менюдобавьте эту функцию в ваш .bashrc, если вы используете 'git difftool', тогда она будет использовать diff по умолчанию
function git {
if [[ $1 == "difftool" ]] ; then
git config --global --unset diff.external
command git diff
git config --global diff.external extDiff
else
command git "$@"
fi
}