git ls-files: как определить новые файлы (добавленные, не зафиксированные)? - PullRequest
59 голосов
/ 19 февраля 2010

После того, как я позвонил git add <file>, команда git status покажет мне что-то вроде:

...
new file:    <file>

Каким-то образом мне не удается получить ту же информацию, используя ls-files, it (ls-files -tc в данном случае) покажет мне:

H <commited file>
H <other commited file>
H <file>

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

Возможно ли это с помощью ls-files или какой-либо аналогичной команды (где мне не нужноразбирать много выходных данных, как в случае git status)?

Ответы [ 2 ]

75 голосов
/ 20 февраля 2010

Вы хотите использовать git diff --cached. С --name-only он перечислит все файлы, которые вы изменили в индексе относительно HEAD. С помощью --name-status вы также можете получить символ статуса, с помощью --diff-filter вы можете указать, какой набор файлов вы хотите показать (например, «A» для вновь добавленных файлов). Используйте -M для включения обнаружения движения и -C для обнаружения копирования, если хотите.

Для самого строгого прочтения из того, что вы написали, git diff --cached --name-only --diff-filter=A перечислит все файлы, которые вы добавили после HEAD, которых нет в HEAD.

40 голосов
/ 19 февраля 2010

Уточнение: Это способ показать файлы, которые я намереваюсь добавить. Это не то, что искал ОП, но я оставлю этот пост на тот случай, если он пригодится другим.

Это показывает только те файлы, которые я добавил [в мою рабочую копию, а не индекс] , но не соответствуют моим стандартным шаблонам игнорирования:

 $ git ls-files --others --exclude-standard

Без --exclude-standard также отображаются файлы, которые игнорируются при запуске git status.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...