Я сделал вариант двух подходов здесь, для собственного использования. Я создал скрипт, который я вызываю вместо запуска git diff
(измените путь twm, если копируете - это мой собственный каталог пользователя):
#!/bin/bash
export TMPDIR=$( realpath --relative-to=. /mnt/c/Users/twm/tmp )
git difftool -y -t winmerge "$@"
Я специально предназначался для WinMerge, вызванного Git, работающим в подсистеме Windows для Linux. Проблема, с которой я столкнулся при использовании TMPDIR, заключалась в том, что в то время, когда Git записывал в него, WinMerge не распознавал временный путь, первоначально потому, что он начинался с «/ mnt / c» - я получил пути для сопоставления между WSL и Windows, за исключением ведущий «c:» и WinMerge все еще не узнали его. Однако я заметил, что другой путь был правильно распознан, и ps
показал, что он передается в WinMerge как относительный путь, поэтому я использовал realpath
, чтобы сделать TMPDIR относительным.
Использование сценария для локальной настройки TMPDIR также решает проблему, упомянутую в комментариях. То есть изменение временного каталога для всех других программ для этого одного варианта использования кажется излишним и может иметь некоторые непреднамеренные побочные эффекты.
Как и второй подход, перечисленный здесь, я тоже использовал псевдонимы Git, пытаясь заставить это работать. Однако я хотел использовать существующую интеграцию WinMerge в Git на тот случай, если встроенная интеграция предоставляет больше функциональных возможностей, чем жестко запрограммированный скрипт, сейчас или в будущем.