`git difftool` не показывает добавленные файлы в Windows

git difftool кажется запутался в Windows. Если был добавлен новый файл, Git отправляет "\. \ Nul" как "левый" файл в инструмент сравнения.

Чтобы воспроизвести это:

{create a new file}
git add .
git difftool --staged

Теперь WinMerge (или любое другое средство просмотра, которое вы используете) запускается, но сообщает, что левый путь ("\. \ Nul") недействителен.

Об этой проблеме несколько раз сообщалось на SO. Например, это точно такая же проблема:

Как заставить winmerge отображать различия для новый файл в git?

Однако принятое решение в приведенном выше вопросе (и во всех других) просто не работает для меня. И теперь, когда мы находимся в 2020 году, есть ли официальное решение этой проблемы?

У Mercurial никогда не было такой проблемы. Он отправляет программе просмотра различий действительные пути и отлично работает. Я удивлен, что столкнулся с этой проблемой с Git.


person Tom B    schedule 10.03.2020    source источник


Ответы (1)


Git должен предоставить способ указать, что конкретный файл не существует. Это происходит при создании или удалении файла.

В Unix типичный способ указать компонент файла, который не существует в diff, - это указать /dev/null. Однако Windows не указывает свои устройства в пределах определенного пути; вместо этого устройство NUL доступно по любому пути с именем файла NUL.

Несмотря на то, что вам сообщает WinMerge, это действительно правильный путь, и он должен нормально работать в Windows. (Например, вы должны иметь возможность написать что-то вроде git diff --no-index \.\nul foo.c, где foo.c - это путь в вашем проекте в командной строке CMD или PowerShell.) Если вы видите эту проблему, возможно, вам следует сообщить об этом в средство отслеживания проблем WinMerge.

person bk2204    schedule 10.03.2020
comment
Хм, похоже, это не относится к WinMerge. Эта проблема возникает со всеми тремя программами сравнения, которые я пробовал в Windows: WinMerge, DiffMerge и KDiff3. И у Mercurial никогда не было этой проблемы с теми же программами. - person Tom B; 11.03.2020
comment
Если вы считаете, что это ошибка в Git для Windows, вы можете сообщить об этом там: похоже, что у вас уже есть. Я почти уверен, что это действительно допустимый путь в Windows, но у меня нет окна Windows для тестирования. - person bk2204; 12.03.2020