Я просто испытал несколько аналогичный опыт с setting Notepad++ as my external editor with msysgit1.6.2.2.
Ключ должен был понять, что оболочка не была сценарием DOS, а скриптом/bin/sh.
Так что попробуйте положить в «.bat» (хотя это не совсем летучая сценарий, расширение не имеет значения здесь):
#!/bin/sh
# diff is called by git with 7 parameters:
# path old-file old-hex old-mode new-file new-hex new-mode
"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" "$2" /title2="New Version" "$5" | cat
Не беспокойтесь о том, чтобы все „\
“ go '/
': это делается скриптами Git, вызывающими внешний инструмент diff.
Я не тестировал его с помощью DiffMerge, но с WinMerge он работает отлично, как с сеанса DOS, так и с Git Shell.
#!/bin/sh
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$2" "$5" | cat
(с опцией «-e
», я только отъ типа на «ESC
», чтобы закрыть и выйти из средства просмотра различий:!, Который прекрасно работает)
average_geek добавляет в комментариях :
добавил заголовок '/bin/sh
' и снова попытался запустить git diff.
На этот раз ошибка:
Unexpected parameter 'C:/Docume~/avggeek/LOCALS~1/Temp/.diff_b08444
Есть ли способ, чтобы увидеть, какие параметры получения прошло, когда я звоню git diff
?
1/Фактически есть способ увидеть, какие параметры пройдены!
Добавьте следующую строку в файле C:\Program Files\Git\libexec\git-core\git-sh-setup
:
git_editor() {
: "${GIT_EDITOR:=$(git config core.editor)}"
: "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}"
case "$GIT_EDITOR,$TERM" in
,dumb)
echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL,"
echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb."
echo >&2 "Please set one of these variables to an appropriate"
echo >&2 "editor or run $0 with options that will not cause an"
echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)."
exit 1
;;
esac
#### ADD THIS LINE BELOW
echo >&2 "editor is ${GIT_EDITOR:=vi} [email protected]"
#### END ADDITION ABOVE
eval "${GIT_EDITOR:=vi}" '"[email protected]"'
}
Вы увидите, что редактор вызывается, с каким параметром.
Теперь, что касается «Неожиданный параметра» часть:
я имел такую же ошибку, когда я назвал WinMergeU.exe с «/e /ub
» вместо «-e -ub
», поэтому первый вопрос:
Вы уверены, , что бит "/title1
" не может использоваться как "-title1
" или "-t1
" или "--title1
" или "--t1
"? Это то, что можно увидеть с chapter 9 "Command Lines Arguments" of the pdf documentation of DiffMerge.
Если нет, я подозреваю, что некоторые двойные кавычки предназначены для правильного разграничения различных параметров. Что-то вроде:
"/title1="Old Version"" "$2" "/title2="New Version"" "$5"
or
"/title1=\"Old Version\"" "$2" "/title2=\"New Version\"" "$5"
Но мои деньги предпочли бы быть на "-title1
" или "-t1
" форме:
-t1="Old Version" "$2" -t2="New Version" "$5"
должен работать нормально.
Только что завершил мой ответ с определенными элементами «DiffMerge», как было запрошено. – VonC