4

After merging several git repositories into on using method from How do you merge two Git repositories?. I'm pushing it into Github but it fails with:

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'

There was some submodules in some repository which I removed manually (rm pathtomodule\.git then rm .gitmodules). How to fix it or there are no other way, only remerge? git fsck --full --strict gives nothing.

Artyom
  • 3,507
  • 2
  • 34
  • 67

1 Answers1

2

I had the same situation (also merged repos and the same error). In my case some old commits indeed contained ill-formed .gitmodules. Since we don't use submodules in our merged repo and I didn't care to keep even valid .gitmodules the way I resolved the problem was to simply remove all .gitmodules files from the entire history. Note: this approach effectively rewrites the entire history keeping all commits as is (minus .gitmodules) but giving them new hashes.

There is a utility to do that.

Or, if you want to do it manually (pretty much copied from the 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
Ed'ka
  • 6,595
  • 29
  • 30