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 .