Почему git diff --name-only не показывает какие-либо измененные файлы? - PullRequest
0 голосов
/ 16 октября 2018

Пожалуйста, обратите внимание (я использую Posh-Git):

C:\xyz\git [master ↑2 +27 ~0 -0 !]> git diff --name-only
C:\xyz\git [master ↑2 +27 ~0 -0 !]>

27 папок не установлены, у каждой есть несколько файлов.Изменения не вносятся.

Почему не отображаются файлы?

РЕДАКТИРОВАТЬ 1

Следующая простая расшифровка демонстрирует проблему:

C:\xyz> mkdir git


    Directory: C:\xyz


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       10/16/2018   1:20 PM                git


C:\xyz> cd git
C:\xyz\git> git init
Initialized empty Git repository in C:/xyz/git/.git/
C:\xyz\git [master]> echo hello > 1.txt
C:\xyz\git [master +1 ~0 -0 !]> git diff --name-only
C:\xyz\git [master +1 ~0 -0 !]> git status
On branch master

No commits yet

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

        1.txt

nothing added to commit but untracked files present (use "git add" to track)
C:\xyz\git [master +1 ~0 -0 !]>

РЕДАКТИРОВАТЬ 2

Согласно https://git -scm.com / docs / git-diff :

git diff [<options>] [--] [<path>…​] 

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

Насколько я понимаю, это означает, что команда git diff --name-only в приведенной выше записи должна содержать список 1.txt

1 Ответ

0 голосов
/ 16 октября 2018

Обратите внимание, что git diff может выполнять множество разных вещей, включая (но не ограничиваясь этим):

  • сравнивать один коммит с другим коммитом
  • сравнивать любой коммит сindex
  • сравнить любой коммит с рабочим деревом
  • сравнить индекс с рабочим деревом

Как вы только что отметили в своем редактировании, вы выбираете этопоследний вариант.

Когда вы выбираете сравнение индекса с рабочим деревом, список файлов для сравнения полностью контролируется содержимым индекса.Любые файлы, которые не отслежены , полностью игнорируются.Это отличается от того, как git status сравнивает индекс с рабочим деревом, но экономит много времени для git diff, поскольку ему не нужно находить файлы, которые могут быть не отслежены (что в целом является медленной операцией).

Если вы хотите, чтобы Git знал, что файлы существуют, используя элемент указателя, который является своего рода заполнителем, рассмотрите возможность использования git add --indent-to-add или, для краткости, git add -N (заглавные N).Я должен также упомянуть, что это состояние («поддельное добавление») было нарушено в течение долгого времени, поэтому существует ряд версий Git, где он ведет себя странно.Также было обновлено в 2.19, чтобы исправить вывод git diff :

  • "git diff" сравнивает индекс и рабочее дерево.Для путей, добавленных с помощью бита intent-to-add, команда показывает их полное содержимое как добавленные, но сами пути не были помечены как новые файлы.По умолчанию они теперь отображаются как новые.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...