«Git diff» ничего не делает


96

Я предполагаю, что это где-то ошибка конфигурации, но я не могу понять, где. Обычные команды 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.

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


Что заставляет вас думать, что есть чем заняться? Что ты ожидал увидеть?
Роб Кеннеди,

Примечание: сообщение об ошибке при использовании git diff вне репо скоро станет более ясным. Смотрите мой ответ ниже
VonC

1
Обратите внимание: если вы пытаетесь различить конкретный файл между двумя коммитами и не видите вывода, убедитесь, что в пути к файлу указан правильный регистр.
Сет Флауэрс,

Ответы:


111

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

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

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

Смотрите документацию для более подробной информации. В частности, прокрутите вниз до примеров и прочтите этот раздел:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Различия рабочей копии с индексом
  2. Различайте индекс с помощью HEAD
  3. Различайте рабочую копию с помощью HEAD

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


13
Я не уверен, что ваш ответ правильный, но он помог мне найти ответ, поэтому спасибо, и я отмечу его как таковой! Вывод по умолчанию для git diff - это не список незафиксированных изменений, это список незафиксированных изменений, которые также «еще не подготовлены для следующей фиксации». Итак, команда, которая делает то, что я ожидал от «git diff», на самом деле «git diff HEAD».
Tom Lianza

2
Чтобы завершить картину, используйте git diff --cached, чтобы показать, что находится в индексе.
Дуглас

делает ли git diff: (индекс) - (рабочий каталог) или наоборот: (рабочий каталог) - (индекс)?
BKSpurgeon

4

Примечание: начиная с git 1.8.5 или 1.9, 4 квартал 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>

2

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


1

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

git diff old_dir new_dir.

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.