Git: список только "невоспроизведенных" файлов (также пользовательские команды)

Есть ли способ использовать команду типа git ls-files для отображения только файлов без следа?

Причина, по которой я спрашиваю, заключается в том, что я использую следующую команду для обработки всех удаленных файлов:

git ls-files -d | xargs git rm

Мне бы хотелось что-то подобное для невоспроизводимых файлов:

git some-command --some-options | xargs git add

Мне удалось найти -o вариант git ls-files, но это не то, что я хочу, потому что он также показывает проигнорированные файлы. Я также смог придумать следующую длинную и уродливую команду:

git status --porcelain | grep '^??' | cut -c4- | xargs git add

Кажется, что мне нужна лучшая команда, которую я могу использовать здесь. И если этого не происходит, как мне создать пользовательские команды git?

Ответ 1

Чтобы получить список неотслеживаемых файлов, попробуйте:

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

Если вам нужно xargs вывод в xargs, разумно использовать пробелы, используя git ls-files -z и xargs -0:

git ls-files -z -o --exclude-standard | xargs -0 git add

Хороший псевдоним для добавления неотслеживаемых файлов:

au = !git add $(git ls-files -o --exclude-standard)

Изменить: Для справки: git-ls-files

Ответ 2

Если вы просто хотите удалить необработанные файлы, сделайте следующее:

git clean -df

добавьте x к этому, если вы хотите также включать в себя специально проигнорированные файлы. Я использую git clean -dfx много в течение дня.

Вы можете создать пользовательский git, просто написав script с именем git-whatever и имея его в своем пути.

Ответ 3

git add -A -n сделает то, что вы хотите. -A добавляет все необработанные файлы в репо, -n делает его dry-run, где добавление не выполняется, но выводится статус, содержащий список всех добавленных файлов.

Ответ 4

Принятый ответ падает на имена файлов с пробелом. На данный момент я не уверен, как обновить команду alias, поэтому я выложу улучшенную версию здесь:

git ls-files -z -o --exclude-standard | xargs -0 git add

Ответ 5

Все очень просто

Чтобы получить список всех неотслеживаемых файлов, используйте команду git status с опцией -u (- -u ntracked-files)

git status -u

Ответ 6

При поиске файлов, которые можно добавить. Результат от git show делает это, но он также включает в себя много других вещей. Следующая команда полезна для получения одного и того же списка файлов, но без всего остального.

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

Это полезно при объединении в конвейере для поиска файлов, соответствующих определенному шаблону, а затем для соединения с git add.

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add

Ответ 7

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

Вы можете использовать операцию git clean с -n (пробный запуск), чтобы показать вам, какие файлы будут удалены (включая файлы .gitignore):

git clean -xdn

Это имеет преимущество, показывая все файлы и все папки, которые не отслеживаются. Параметры:

  • x - показывает все неотслеживаемые файлы (включая игнорируемые git и другие, такие как выходные данные сборки и т.д.)
  • d - показать неотслеживаемые каталоги
  • n - и самое главное! - dryrun, то есть на самом деле ничего не удаляйте, просто используйте механизм очистки для отображения результатов.

Ответ 8

Все предыдущие ответы, которые я проверял, также содержат список файлов для фиксации. Вот простое и легкое решение, в котором перечислены только те файлы, которые еще не находятся в репо и не подлежат .gitignore.

git status --porcelain | awk '/^\?\?/ { print $2; }'

Ответ 9

Я думаю, что это будет так же, как и предполагаемый оригинальный плакат:

git add .