git filter-branch сохраняет слишком много истории - PullRequest
0 голосов
/ 07 октября 2019

Я работаю над разделением довольно большого монорепо на несколько репо для каждого приложения. 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). История до этого хода, кажется, содержит всю историю всего монорепо.

Кто-нибудь знает, как решить эту проблему?

...