在将几个 git 存储库 merge 到 on using How do you merge two Git repositories? 方法之后。我正在将它推送到 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 '[email protected]:...........git'

我手动删除了某个存储库中的一些子模块( rm pathtomodule\.git 然后 rm .gitmodules )。怎么解决,还是没有其他办法,只能重新 merge ? git fsck --full --strict 什么也没给。

最佳答案

我有同样的情况(也 merge 了 repo 和同样的错误)。就我而言,一些旧的提交确实包含格式错误的 .gitmodules 。由于我们不在 merge 的 repo 中使用子模块,而且我不在乎保留有效的 .gitmodules,因此我解决问题的方法是简单地从整个历史记录中删除所有 .gitmodules 文件。注意:这种方法有效地重写了整个历史记录,保持所有提交原样(减去 .gitmodules ),但为它们提供新的哈希值。

a utility 可以做到这一点。

或者,如果您想手动执行此操作(几乎是从实用程序中复制的):

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

关于git - 无法推送到 Github : gitmodulesParse: could not parse gitmodules blob,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52421573/

10-13 06:42