将来自How do you merge two Git repositories?的多个git仓库合并到on using方法中。我将其推入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
什么也没有。
答案 0 :(得分:1)
我遇到了相同的情况(也合并了回购协议,并且出现了相同的错误)。就我而言,某些旧提交确实包含格式错误的.gitmodules
。由于我们不在合并的回购协议中使用子模块,因此我不关心保持有效的.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