Git: Как игнорировать все существующие невоспроизводимые файлы?

Есть ли удобный способ игнорировать все необработанные файлы и папки в репозитории git?
(Я знаю о .gitignore.)

Итак, git status снова даст чистый результат.

Ответ 1

Как уже было сказано, исключить из состояния просто:

git status -uno  # must be "-uno" , not "-u no"

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

git status --porcelain | grep '^??' | cut -c4- >> .gitignore

Каждый последующий вызов git status будет явно игнорировать эти файлы.

UPDATE: приведенная выше команда имеет незначительный недостаток: если у вас нет файла .gitignore, но ваш gitignore будет игнорировать себя! Это происходит потому, что файл .gitignore создается до того, как выполняется git status --porcelain. Поэтому, если у вас нет файла .gitignore, я рекомендую использовать:

echo "$(git status --porcelain | grep '^??' | cut -c4-)" > .gitignore

Это создает подоболочку, которая завершается до создания файла .gitignore.

ОБЪЯВЛЕНИЕ ОБЪЯВЛЕНИЯ, поскольку я получаю много голосов (спасибо!) Я думаю, что мне лучше объяснить команду немного:

  • git status --porcelain используется вместо git status --short, потому что manual утверждает: "Дайте результат в формате простого для анализа скриптов. Это похоже на короткий вывод, но будет оставаться стабильным в версиях git и независимо от пользовательской конфигурации." Таким образом, мы обладаем как синтаксической обработкой, так и стабильностью;
  • grep '^??' фильтрует только строки, начинающиеся с ??, которые в соответствии с git инструкцией по статусу соответствуют несоответствующим файлы;
  • cut -c4- удаляет первые 3 символа каждой строки, что дает нам только относительный путь к необработанному файлу;
  • Символы | pipe, которые передают вывод предыдущей команды на вход следующей команды:
  • символы >> и > перенаправляют операторы, которые добавляют результат предыдущей команды в файл или перезаписывают/создают новый файл, соответственно.

ДРУГОЙ ВАРИАНТ для тех, кто предпочитает используя sed вместо grep и cut, здесь другой способ:

git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore

Ответ 2

Если вы хотите постоянно игнорировать эти файлы, простой способ добавить их в .gitignore:

git ls-files --others --exclude-standard >> .gitignore

Ответ 4

-u no также не отображается неустановленные файлы. -uno работает по желанию и показывает неустановленный, но скрывает невоспеты.

Ответ 5

Два способа:

используйте аргумент "-uno" для git -status. Вот пример:

[[email protected]_vmware:ft]$ git status
# On branch ft
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       foo
nothing added to commit but untracked files present (use "git add" to track)
[[email protected]_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)

Или вы можете добавить файлы и директивы в .gitignore, и в этом случае они никогда не появятся.

Ответ 6

Если у вас много неиспользуемых файлов и вы не хотите "gitignore" всех, обратите внимание, что, поскольку git 1.8.3 (22 апреля 2013 г.), git status упомянет --untracked-files=no, даже если вы не добавили эту опцию в первую очередь!

"git status" предлагает пользователям изучить возможность использования опции --untracked=no, если она занимает слишком много времени.