Есть ли удобный способ игнорировать все необработанные файлы и папки в репозитории git?
(Я знаю о .gitignore
.)
Итак, git status
снова даст чистый результат.
Есть ли удобный способ игнорировать все необработанные файлы и папки в репозитории git?
(Я знаю о .gitignore
.)
Итак, git status
снова даст чистый результат.
Как уже было сказано, исключить из состояния просто:
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
Если вы хотите постоянно игнорировать эти файлы, простой способ добавить их в .gitignore
:
git ls-files --others --exclude-standard >> .gitignore
Найденное в руководство
git status -uno
-u no
также не отображается неустановленные файлы. -uno
работает по желанию и показывает неустановленный, но скрывает невоспеты.
Два способа:
используйте аргумент "-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, и в этом случае они никогда не появятся.
Если у вас много неиспользуемых файлов и вы не хотите "gitignore
" всех, обратите внимание, что, поскольку git 1.8.3 (22 апреля 2013 г.), git status
упомянет --untracked-files=no
, даже если вы не добавили эту опцию в первую очередь!
"
git status
" предлагает пользователям изучить возможность использования опции--untracked=no
, если она занимает слишком много времени.