git diff ничего не делает

Я предполагаю, что это где-то ошибка конфигурации, но я не могу понять, где. Обычные команды git работают нормально, но «git diff» ничего не делает. Чтобы быть в безопасности, я удалил внешние инструменты сравнения из моего файла .gitconfig. Это было установлено через MacPorts и является последней версией (1.7.2.2).

Что я вижу, так это то, что когда я запускаю "git diff" из своего рабочего пространства, он просто выходит, ничего не делая.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Если я создаю резервную копию одного каталога из своего корневого рабочего пространства, ввод «git diff» дает мне это:

$ git diff
usage: git diff [--no-index] <path> <path>

Это может быть ожидаемым поведением, поскольку я не нахожусь в репозитории git.

Любые идеи о том, что я могу сделать, чтобы устранить эту проблему?


person Tom Lianza    schedule 27.08.2010    source источник
comment
Что заставляет вас думать, что есть что-то для устранения неполадок? Что вы ожидали увидеть?   -  person Rob Kennedy    schedule 27.08.2010
comment
Примечание. Сообщение об ошибке при использовании git diff вне репозитория скоро станет яснее. См. мой ответ ниже   -  person VonC    schedule 19.09.2013
comment
Обратите внимание: если вы пытаетесь различить конкретный файл между двумя фиксациями и не видите результата, убедитесь, что в пути к файлу указан правильный регистр.   -  person Seth Flowers    schedule 26.09.2014


Ответы (5)


Выход по умолчанию для git diff — это список изменений, которые не были зафиксированы/добавлены в индекс. Если изменений нет, то и выхода нет.

git diff [--options] [--] […]

Эта форма предназначена для просмотра изменений, которые вы сделали относительно индекса (промежуточной области для следующего коммита). Другими словами, различия заключаются в том, что вы могли сообщить git о необходимости дальнейшего добавления в индекс, но до сих пор этого не сделали.

Дополнительные сведения см. в документации. В частности, прокрутите вниз до примеров и прочитайте этот раздел:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Сравните рабочую копию с индексом
  2. Diff индекс с HEAD
  3. Сравните рабочую копию с помощью HEAD

Как вы уже догадались, за пределами вашей рабочей области git не будет знать, что сравнивать, поэтому вам нужно явно указать два пути для сравнения, отсюда и сообщение об использовании.

person Douglas    schedule 27.08.2010
comment
Я не уверен, что ваш ответ правильный, но он помог мне найти ответ, так что спасибо, и я отмечу его как таковой! Вывод по умолчанию для git diff — это не список незафиксированных изменений, это список незафиксированных изменений, которые также еще не подготовлены для следующей фиксации. Итак, команда, которая делает то, что я ожидал от git diff, на самом деле git diff HEAD. - person Tom Lianza; 27.08.2010
comment
Для полноты картины используйте git diff --cached, чтобы показать только то, что находится в индексе. - person Douglas; 27.08.2010
comment
делает ли git diff: (индекс) - (рабочий каталог) или наоборот: (рабочий каталог) - (индекс)? - person BKSpurgeon; 10.02.2016

Примечание. запуск git 1.8.5 или 1.9, четвертый квартал 2013 г.:

Когда пользователь вводит "git diff" за пределами рабочего дерева, думая, что находится внутри него, текущее однострочное сообщение об ошибке:

usage: git diff --no-index <path> <path>

может быть недостаточно, чтобы заставить его осознать ошибку.

Добавьте «Not a git repository» к сообщению об ошибке, когда мы попали в режим «--no-index» без явного параметра командной строки, чтобы указать нам сделать это.


Видеть:

Уточните документацию для "diff --no-index".
Укажите, что если не внутри репозитория, подразумевается --no-index, а два аргумента являются обязательными.

Уточните сообщение об ошибке от diff-no-index, чтобы сообщить пользователю, что CWD не находится внутри репозитория, и поэтому два аргумента являются обязательными.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
person VonC    schedule 19.09.2013

Ничего не делает, если ваш рабочий каталог чист и нет никаких отличий от последнего обновления. Попробуйте отредактировать файл, а затем снова запустите git diff, после чего он должен отобразить разницу.

person Jaanus    schedule 27.08.2010

Если вы используете его вне реального репозитория или рабочей копии, его поведение идентично GNU diff. Поэтому вам нужно сообщить 2 каталога или файла для сравнения. Пример:

git diff old_dir new_dir.

Если между ними есть какая-либо разница, вывод покажет вам, как и ожидалось.

person jweyrich    schedule 27.08.2010

Не в вашем случае, но, возможно, потому, что файл, который вы передаете, не существует

$ git difftool HEAD HEAD^ -- path/that-not-exists

ничего не случилось

person deFreitas    schedule 28.12.2015