Я решил это сам, вот так.
Создайте временный каталог и перейдите туда
cd $(mktemp -d)
Получите пакет из ваших OP (полный снимок) хранилища там
mv /tmp/yourrepo.bundle .
Клонировать сломанный репозиторий из GitLab в BROKEN
git clone --mirror URL_to_yourrepo BROKEN.git
cd в BROKEN и запустите git bundle verify ../reponame.bundle. Он не должен сообщать о каких-либо ошибках, если так, продолжайте
cd BROKEN.git
git bundle verify ../yourrepo.bundle
Вернитесь назад и затем клонируйте новый репозиторий из файла комплекта
cd ..
cd git clone --mirror yourrepo.bundle LASTKNOWNGOOD.git
cd и убедитесь, что все ваши рефери здесь, как вы ожидаете, будут
cd LASTKNOWNGOOD.git
git show-ref
Теперь установите удаленный репозиторий на локальный клон BROKEN из GitLab
git remote add BROKEN ../BROKEN.git
Затем перенесите содержимое здесь на BROKEN пульт ДУ
git push --tags --force --mirror BROKEN
К тому времени хранилище BROKEN должно быть исцелено.
Перейдите в BROKEN и смоделируйте пуш, чтобы убедиться, что он будет делать то, что вы ожидаете
cd ../BROKEN.git
git push --tags --verbose --dry-run --mirror origin
Если похоже, что вы ожидаете, запустите без --dry-run
, чтобы исцелить удаленный репозиторий.
Он может сообщать о remote rejected
, но если они принадлежат группе keep-around
refs, вы можете спокойно их игнорировать.
Вам также необходимо повторно открыть все автоматически закрытые запросы на слияние в GitLab для этого хранилища.