git clean исключить с помощью регулярных выражений

Я хотел бы найти регулярное выражение использования git clean,

Без регулярного выражения:

git clean -dfx --exclude=".idea/"

С регулярным выражением (пробовал; не работает):

git clean -dfx --exclude='(.*\/)*(\.idea\/.*)(.*)'
git clean -dfx --exclude="(.*\/)*(\.idea\/.*)(.*)"
git clean -dfx --exclude=r'(.*\/)*(\.idea\/.*)(.*)'
git clean -dfx --exclude=r"(.*\/)*(\.idea\/.*)(.*)"

Как вы используете git clean с регулярным выражением?

1 ответ

git clean не поддерживает регулярные выражения.


Обходной путь будет примерно таким:

$ git clean -n | cut -f3 -d' ' | grep -v -E --color=never '<PATTERN>' | ifne git clean

Разбивка вещей, происходящих здесь:

  • git clean -n создает список файлов, которые будут удалены, если git clean будет выполнен (вы можете использовать флаги как -d, -x или же -X здесь тоже)
    • -n всухую (на самом деле ничего не делать)
  • cut -f3 -d' ' вырезает третье поле из этих совпадений (разделенных пробелами)
    • -f3 третье поле
    • -d' ' используйте пробел в качестве разделителя
  • grep -v -E --color=never '<PATTERN>'
    • -v инвертировать спички от grep
    • -E интерпретировать PATTERN как расширенное регулярное выражение
    • color=never чтобы предотвратить цветные grep вывод связываться со следующими командами (может быть опущен)
    • '<PATTERN>' регулярное выражение
  • ifne git clean направит список файлов (если есть файлы) в git clean
    • ifne служебная функция от moreutils (устанавливается через homebrew или другие менеджеры пакетов)
    • git clean возьму этот список и очистить файлы (используйте -n сначала убедитесь, что не были удалены файлы, которые вы не ожидали)

Это магия небольших программ командной строки, каждая из которых выполняет простую конкретную задачу

Другие вопросы по тегам