Ответ 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
требуется, чтобы НЕ обрабатывать удаленные файлы).