Ответ 1
Я бы использовал что-то вроде git status --porcelain | grep "^A" | cut -c 4-
Когда я делаю git status
, я получаю список файлов с префиксом new file:
. Как я могу получить только этот список? Я хочу обработать эти файлы в простом цикле в маленькой оболочке script.
Я бы использовал что-то вроде git status --porcelain | grep "^A" | cut -c 4-
Не используйте grep для разбора вывода git. git почти наверняка есть то, что вы ищете для встроенного (за исключением случаев, когда вы идете на действительно продвинутые вещи).
Вы можете использовать git diff
, чтобы показать изменения. --name-only
показывает только имена файлов. --diff-filter=A
перечислены только добавленные файлы.
Если вы хотите увидеть новые файлы, которые вы уже добавили в индекс, используйте --cached
, иначе опустите его. Чтобы увидеть как diff, так и HEAD
.
Команды выглядят так:
git diff --name-only --diff-filter=A --cached # All new files in the index
git diff --name-only --diff-filter=A # All files that are not staged
git diff --name-only --diff-filter=A HEAD # All new files not yet committed
Вы можете использовать git status --short, чтобы получить список файлов.
Вместо синтаксического анализа вывода "git status", вероятно, более элегантно использовать
git ls-files -o --exclude-standard
Как и в случае с git status
, ls-files
будет выдавать результат относительно вашего рабочего каталога.
Возможно, вы захотите включить опцию --full-name
:
git ls-files -o --exclude-standard --full-name
Список новых файлов или получение файлов, которые будут добавлены в git, можно получить с помощью команды git status и grep, например git status -s | grep ??
[email protected]:~/project-repo-directory# git status -s | grep ??
?? src/.../file1.js
?? src/.../file2.js
?? src/.../file3.js
....
git status | grep "new file:" | cut -c 14-
git status | grep "modified:" | cut -c 14-