git-cleanup
Описание
Утилита Python CLI для безопасного удаления старых веток Git — одновременно локальных и удалённых (например origin). Группирует по месяцам и предварительно показывает что удалить. Удалять ветки до указанного месяца включительно, удалять ветки старше N месяцев назад, глоб-маски для исключения веток, защищенные ветки.
Языки
- Python100%
🧹 git-cleanup.py
Утилита Python CLI для безопасного удаления старых веток Git — одновременно локальных и удалённых (например origin). Теперь поддерживает: • указание пути к репозиторию (позиционный аргумент REPO); • исключение веток по глоб-маскам (--exclude r/,release).
📦 Установка
Требуется Python 3.8+ и установленный Git.
🚀 Быстрый старт
Отчёт (ничего не удаляется) для репо в текущем каталоге
Удалить всё до декабря-2024, игнорируя r/* и release*
Аргументы и флаги
| Параметр | Обязательно | По умолчанию | Описание |
|---|---|---|---|
| REPO | ✅ | — | Путь к Git-репозиторию (. — текущий каталог) |
| --cutoff YYYY-MM | ✅* | — | Удалять ветки до указанного месяца включительно |
| --months N | ✅* | — | Удалять ветки, старше N месяцев назад |
| --delete | ❌ | False | Выполнить удаление (без него всегда dry-run) |
| --dry-run | ❌ | False | Насильно включить пробный запуск — показать команды, не выполняя |
| --yes | ❌ | False | Не спрашивать подтверждение перед удалением |
| --remote NAME | ❌ | origin | Какой удалённый чистить |
| --protected LIST | ❌ | main,develop | Через запятую — ветки, которые никогда не трогаем |
| --exclude MASKS | ❌ | — | Глоб-маски для исключения веток (можно повторять или через ,) |
- Нужно указать либо
, либо--cutoff.--months
🏷 Маски --exclude
Маски понимают те же шаблоны, что оболочка Bash / fnmatch:
--exclude "r/" # исключить любые ветки r/… --exclude r/18. # исключить r/18.01, r/18.02 … --exclude "hotfix?,bug*" # несколько масок через запятую
Флаг можно повторять:
--exclude r/* --exclude release*
Сначала применяются --protected, затем --exclude.
🔐 Безопасность
• По умолчанию ничего не удаляется — пока не добавите --delete.
• Любые ветки из --protected остаются нетронутыми.
• Если не указан --yes, скрипт запрашивает подтверждение.
📑 Примеры
- Отчёт, какие ветки старше 12 месяцев
- Удаляем старые ветки, но НЕ трогаем r/* и любые release*
- Удаляем всё до 2024-12, кроме main, develop, release/**
📝 Лицензия
MIT — используйте свободно. Перед массовым удалением рекомендуется запускать --dry-run.