Как git filter-branch влияет на репо, используемые в качестве подмодулей? - PullRequest
1 голос
/ 15 апреля 2020

Я хочу использовать git filter-branch для удаления некоторых больших файлов из истории фиксации хранилища с именем problems. Вызывает ли это какие-либо проблемы в моем репозитории thesis, который использует репозиторий problems в качестве подмодуля?

А именно, требует ли сила pu sh, требуемая с git filter-branch, какими-либо специальными действиями или соображениями в thesis хранилище?

1 Ответ

0 голосов
/ 15 апреля 2020

Краткий ответ - «да». Ветвь фильтра работает путем копирования коммитов в новые и улучшенные коммиты с различными идентификаторами ha sh.

Если скопированный репозиторий используется в качестве подмодуля, репозиторий суперпроекта содержит коммиты которые хранят необработанные идентификаторы ha sh коммитов субмодуля. Поскольку новые и улучшенные коммиты имеют различных га sh идентификаторов, суперпроект теперь содержит старые (т.е. неправильные) идентификаторы ha sh, по крайней мере для любых коммитов, которые были скопированы и заменяется следующим образом.

Это означает, что теперь вы должны заменить любые коммиты в суперпроекте, которые имеют в качестве gitlink идентификатор ha sh идентификатора коммита, который был заменен на новый и улучшенный коммит в хранилище субмодулей. Делать это нетривиально.

Команде filter-branch можно сказать сохранить отображение от старых к новым идентификаторам ha sh, используя опцию --state-branch. (Эта опция была новой в Git 2.15.0.) Вам понадобится это отображение состояний. Непонятно , как использовать его при запуске ветки фильтра над суперпроектом, но вам понадобится фильтр, который находит коммиты, содержащие gitlinks, содержащие записи старых коммитов и сообщающие фильтру суперпроекта заменить их обновленными ссылками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...