Перейти к главному содержимому

Фильтрация репозиториев 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.