Ответ 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