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?

10 ответов

Решение

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

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

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

git clean -df

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

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

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

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

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

git status -u

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

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

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

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

git clean -xdn

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

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

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

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

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

Я думаю, что нашел функцию/проблему с:

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

желание отображать только неотслеживаемые файлы:
если неотслеживаемый файл находится в измененном каталоге, файл не будет указан

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

git add .

Другие вопросы по тегам