Я работаю над разделением довольно большого монорепо на несколько репо для каждого приложения. Monorepo имеет следующую структуру папок:
|- a
| |- application1
| |- application2
|- b
| |- application3
| |- application4
|- c
| |- application5
Если я хочу перенести application1, я запускаю следующие команды:
git filter-branch --tag-name-filter cat --subdirectory-filter "a/application1" -- --all
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --prune=now
Это работало для нескольких приложений, но теперьЯ столкнулся с проблемой: одно из перенесенных приложений имеет огромную историю мерзавцев, близкую к размеру самого monorepo. Изучая историю, я обнаружил, что она сохраняет большую часть истории моно-репо, включая коммиты, принадлежащие другим приложениям.
При просмотре истории последние коммиты выглядят хорошо, все они связаны сперенесенное приложение. Поворотным моментом, по-видимому, является фиксация, когда рассматриваемое приложение было перемещено из папки в другую (поэтому предположим, что application1 находился в одной точке git mv
-ed из папки b в папке a). История до этого хода, кажется, содержит всю историю всего монорепо.
Кто-нибудь знает, как решить эту проблему?