“Git diff” нічого не робить


94

Я припускаю, що це десь помилка конфігурації, але я не можу зрозуміти, де. Звичайні команди git, здається, працюють нормально, але "git diff" нічого не робить. Щоб перестрахуватися, я видалив зовнішні інструменти 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

Зверніть увагу, що якщо ви намагаєтеся розрізнити певний файл між двома комітами і не бачите вихідних даних, переконайтеся, що в шляху до файлу правильний корпус.
Seth Flowers

Відповіді:


110

Вихідним значенням для 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, Q4 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. Тож вам потрібно повідомити 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.