Как получить winmerge, чтобы показать diff для нового файла в git?

Я могу получить winmerge, чтобы показать мне diff для измененного файла. Но для новых файлов winmerge дает диалог с надписью "Левый путь недействителен!". Я хочу, чтобы он отображал левую панель как пустую и правую панель с содержимым файла.

$ git difftool head^ newfile.txt

winmerge Диалог:

введите описание изображения здесь

Я нахожусь на git версии 2.8.2.windows.1

Это мой git config для difftool:

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" -e -ub -wl \"$LOCAL\" \"$REMOTE\"

Что мне не хватает?

Ответ 1

Я не мог найти это точное обходное решение, поэтому я публикую это. Надеюсь, кто-то сочтет это полезным.

Я использую winmerge.sh script, который просто передает уже созданный пустой файл для вновь добавленного (или удаляемого) файла. script находится в директории PATH или /git/cmd/ для git bash.

winmerge.sh (аналогично здесь)

#!/bin/sh
# $1 is $LOCAL
# $2 is $REMOTE
NULL="/dev/null"
empty="$HOME/winmerge.empty"
if [ "$2" = "$NULL" ] ; then
    # added
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl -wr "$1" "$empty"
elif [ "$1" = "$NULL" ] ; then
    # removed
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl "$empty" "$2"
else
    # modified
    "D:/setups/WinMerge/WinMergeU.exe" -e -ub -wl "$1" "$2"
fi

Я сохраняю пустой файл winmerge.empty на этом пути $HOME (который c:/users/<username>).

Я использую sh script в .gitconfig.

.gitconfig

[diff]
    tool = winmerge
[difftool]
    prompt = false
[difftool "winmerge"]
    cmd = winmerge.sh "$LOCAL" "$REMOTE"

Примечание:

Чтобы отличать файлы без следа (новые файлы) и перед фиксацией, я делаю

$ git add -N --no-all .

затем используйте difftool. -N --no-all только добавляет путь к новым файлам для индексации, но не к их содержимому (--no-all требуется, чтобы НЕ обрабатывать удаленные файлы).