Git: список только "неотслеживаемых" файлов (также, пользовательских команд) - PullRequest
302 голосов
/ 27 сентября 2010

Есть ли способ использовать команду типа 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?

Ответы [ 9 ]

479 голосов
/ 27 сентября 2010

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

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

Если вам нужно перенаправить вывод в 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

66 голосов
/ 27 сентября 2010

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

git clean -df

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

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

44 голосов
/ 04 апреля 2012

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

27 голосов
/ 14 декабря 2011

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

git ls-files -z -o --exclude-standard | xargs -0 git add
23 голосов
/ 10 ноября 2014

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

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

git status -u
5 голосов
/ 17 июня 2015

При поиске файлов для потенциального добавления. Вывод из 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
4 голосов
/ 28 февраля 2018

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

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

git clean -xdn

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

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

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

git status --porcelain | awk '/^\?\?/ { print $2; }'
0 голосов
/ 05 июня 2012

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

git add .

...