2016-11-21 4 views
2

Когда я делаю git diff, он пытается запустить мой инструмент diff с файлами, которых не существует. Я предполагаю, что он получает последнюю версию измененного файла .gitignore и копирует его во временный файл. Так я вижу, что запуск:git diff пытается сравнить файлы, которых не существует

"C:\Program Files\Git\usr\bin\diff.exe" .gitignore C:/temp/D4Sgyb_.gitignore 55f1.... 100644 .gitignore 000.... 100644 

Но дифф инструмент жалуется, это правильно, что C:/temp/D4Sgyb_.gitignore не существует. Не создается ли оно слишком рано?

+0

Обычно 'git diff' делает свой собственный внутренний diff, но если вы * говорите *, что он использует какую-то другую программу, он вызывает этот« внешний »diff с семью аргументами: * path old-file old-hex old-mode new -file new-hex new-mode *. Это, по-видимому, начало внешнего разлома. См. Https://www.kernel.org/pub/software/scm/git/docs/git.html#_git_diffs – torek

+0

Но, по-видимому, он не создает временный файл, который он передает внешнему инструменту. – Marc

+0

Интересно. В документах упоминается (и код написан для этого), что Git удалит временный файл, как только закончится внешняя программа, т. Е. Выйдет, и процесс будет собран Git. Я не «делаю» Windows, но, возможно, что-то делает эквивалент «двойной вилки» Unix/Linux? Или это просто ошибка в Windows Git, не замечая, что он никогда не смог создать временный файл. :-) – torek

ответ

0

Внутри git repo каждый файл сжимается. Поэтому, если вы хотите сравнить файл, а не в своем рабочем каталоге, вам нужно распаковать этот файл во временный каталог.

Возможно, ваш C:/temp dir не существует или у вас нет полного доступа к нему (или какой-либо антивирус удаляет этот файл). Я считаю, что «C:/temp» - это плохой путь для современных Windows. Проверьте свой PATH env.

+0

На самом деле это не 'c: \ temp', а папка'% temp% 'моего пользователя. Я просто анонимизировал данные. У меня действительно есть права на право на папку. – Marc

+0

Вы используете внутренние утилиты diff или какое-то другое приложение, а также «анонимизировали» его? – KoVadim

+0

Я сделал это первоначально, но я переключился на инструмент git diff, чтобы узнать, помогло ли это. Пример выше - это действительно путь к diff.exe, который я использую. – Marc