git diff не показывает новый файл - PullRequest
0 голосов
/ 07 мая 2019

Я создал новый файл file.txt в моем рабочем дереве. git status показывает это правильно:

$ git status
On branch mybranch
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        file.txt

nothing added to commit but untracked files present (use "git add" to track)

Однако git diff ничего не показывает.

$ git diff

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

git --no-pager diff file.txt

и

GITPAGER=cat git diff file.txt

с тем же пустым результатом.

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

$ git add file.txt
$ git diff --cached
diff --git a/file.txt b/file.txt
new file mode 100644
index 0000000..f2d7933
--- /dev/null
+++ b/file.txt
@@ -0,0 +1 @@
+asds
\ No newline at end of file

Это все в Windows 10 и последней версии git.

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

1 Ответ

2 голосов
/ 07 мая 2019

Так как git не отслеживал новый файл при его создании, git не мог определить, что изменилось. Когда вы делаете git add file, файл перемещается в промежуточную область git, и теперь он отслеживается. Следовательно, git diff будет работать как обычно, поскольку git теперь имеет необходимую информацию о вашем файле.

git docs дает больше информации о неотслеживаемых файлах, как показано ниже -

Помните, что каждый файл в вашем рабочем каталоге может находиться в одном из двух состояния: отслежены или нет. Отслеживаемые файлы - это файлы, которые были в последний снимок; они могут быть неизмененными, модифицированными или поэтапными. Короче, отслеживаемые файлы - это файлы, о которых Git знает.

Неотслеживаемые файлы - все остальное - любые файлы в вашей работе каталог, который не был в вашем последнем снимке и не находится в вашем плацдарм. Когда вы впервые клонируете репозиторий, все ваши файлы будет отслеживаться и не изменяться, потому что Git только что проверил их и Вы ничего не редактировали.

Когда вы редактируете файлы, Git видит их как измененные, потому что вы изменили их с момента вашего последнего коммита. Работая, вы избирательно ставите эти измененные файлы, а затем зафиксировать все эти поэтапные изменения и цикл повторы.

...