Фильтрация репозиториев git
Введение
Отличный инструмент для изменения репозиториев (с переписыванием и фильтрацией истории) - git-filter-repo.
Написан на python в виде одного файла-скрипта и является более удобной
заменой git filter-branch и BFG Repo Cleaner.
Запуск под Windows
Для запуска под Windows в виде команды можно положить скрипт в каталог,
прописанный в системной переменной окружения PATH и создать,
для более удобного запуска в консоли,
рядом bat-файл следующего содержания:
@echo off set PP=%~dp0 python %PP%git-filter-repo.py %*
Примеры использования
Замена строки во всех файлах:
git-filter-repo --replace-text <(echo 'find==>replacement')
Сохранить выбранный каталог (остальные будут удалены).
Можно указать несколько каталогов, для этого надо добавить аргументов --path.
git-filter-repo --path path/to/folder [--path path/to/another] [--path....]
Удалить выбранный каталог.
Можно указать несколько каталогов, для этого надо добавить аргументов --path.
git-filter-repo --path path/to/folder --invert-paths
Переименовать (переместить) каталог:
git-filter-repo --path-rename path/to/folder/:newpath/for/folder/
Переместить каталог из глубин на верхний уровень:
git-filter-repo --path-rename path/to/folder/:
Удалить файлы по маске:
git-filter-repo --path-glob *.bak --path-glob *.old --invert-paths
Запуск анализа репозитория:
git-filter-repo --analyze [--force]
Если надо оставить один каталог из глубины и сделать его корневым это можно сделать либо двумя командами их вышеперечисленных, либо одной короткой командой:
## Either that way: git-filter-repo --path <directory>/ git-filter-repo --path-rename <directory>/: ## Or that way: git-filter-repo --subdirectory-filter <directory>
И это далеко не всё, что умеет делать этот скрипт.
Более подробное описание здесь: https://www.mankier.com/1/git-filter-repo.