git ls-files: как идентифицировать новые файлы (добавлены, не зафиксированы)?


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

...
new file:    <file>

почему я не могу управлять, чтобы получить ту же информацию с помощью ls-files, он (ls-files -tc в этом случае) покажет мне:

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

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

возможно ли это с ls-files или аналогичная команда (где I не нужно разбирать много вывода, Как в случае git status)?

2   51  
2010-02-19 19:50:08

2 ответа:

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

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

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

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

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

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