Не могу нажать на Github: gitmodulesParse: не удалось разобрать blob gitmodules - PullRequest
0 голосов
/ 20 сентября 2018

После объединения нескольких репозиториев git в метод с использованием Как объединить два репозитория Git? .Я помещаю его в Github, но он не работает с:

git push -u origin master
Counting objects: 755, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (518/518), done.
Writing objects: 100% (755/755), 29.91 MiB | 1.55 MiB/s, done.
Total 755 (delta 195), reused 481 (delta 128)
remote: error: bad config line 1 in blob .gitmodules
remote: error: object b13fc97cca572d71bf5dad31706d4691bb11a1e7: gitmodulesParse: could not parse gitmodules blob
remote: fatal: fsck error in packed object
error: unpack failed: index-pack abnormal exit
To github.com:...........git
 ! [remote rejected] master -> master (failed)
error: failed to push some refs to 'git@github.com:...........git'

В некоторых хранилищах было несколько подмодулей, которые я удалил вручную (rm pathtomodule\.git, затем rm .gitmodules).Как это исправить или другого пути нет, только всплыть?git fsck --full --strict ничего не дает.

1 Ответ

0 голосов
/ 27 января 2019

У меня была такая же ситуация (также слились репо и та же ошибка).В моем случае некоторые старые коммиты действительно содержали неправильно сформированные .gitmodules.Поскольку мы не используем подмодули в нашем объединенном репо, и мне было все равно, чтобы сохранить даже действительный .gitmodules, способ, которым я решил проблему, заключался в простом удалении всех .gitmodules файлов из всей истории.Примечание: этот подход эффективно переписывает всю историю, сохраняя все коммиты как есть (минус .gitmodules), но давая им новые хэши.

Для этого есть утилита .

Или, если вы хотите сделать это вручную (в значительной степени скопировано из утилиты):

git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitmodules' --force -- --branches --tags
rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/
(git for-each-ref --format="%(refname)" refs/original/ || echo :) | xargs --no-run-if-empty -n1 git update-ref -d
git reflog expire --expire-unreachable=now --all
git repack -q -A -d
git gc --aggressive --prune=now
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...