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 .