20Feb/12Off
git push: fatal: unable to read SHA1
Today, I was faced with an interesting error in a git repository. I am backing up a lot of old projects from during and after college into a private git repo. In doing so, I moved some folders around which disconnected a couple of binary files. After pushing, I received an error: unable to read [SHA1].
The fixes, in short:
$ git fsck $ git log --raw --all --full-history | grep SHA1-HERE $ git hash-object -w OBJECT-PATH-HERE $ git push
Here is the error and a walk-through of coming up with the fixes above:
jim at schubert in /media/16GB/projects/school on master $ git push Password: Counting objects: 1945, done. error: unable to find 2978ec4d75abb8c6bab225d8adfbd2bef064338a error: unable to unpack bddbd13afd698e5ba7d572c9270e52bcac862661 header error: inflateEnd: failed Delta compression using up to 2 threads. Compressing objects: 100% (1854/1854), done. fatal: unable to read 2978ec4d75abb8c6bab225d8adfbd2bef064338a fatal: The remote end hung up unexpectedly fatal: The remote end hung up unexpectedly fatal: write error: Bad file descriptor
After running git fsck, I found that I had two missing blobs:
jim at schubert in /media/16GB/projects/school on master* $ git fsck dangling tree dbe9172996edbb7df517b0305c38891d78b72f66 dangling tree fbf7d8336b5f2347da23eb8a3938de5ab18f783c missing blob 2978ec4d75abb8c6bab225d8adfbd2bef064338a missing blob bddbd13afd698e5ba7d572c9270e52bcac862661
To fix this, I had to get the filenames of these blobs and write them back into the repository:
jim at schubert in /media/16GB/projects/school on master* $ git log --raw --all --full-history | grep bddbd13 :000000 100644 0000000... bddbd13... A INFO 465/Project2/UseCase/Diagrams/Leader - Time & Mileage.vsd jim at schubert in /media/16GB/projects/school on master* $ git log --raw --all --full-history | grep 2978ec4 :000000 100644 0000000... 2978ec4... A INFO 465/Project2/Prototype/WebPrototype/WebPrototype/bin/WebPrototype.dll
Writing these files back into the repository, the push was successful. To write these back, do the following:
jim at schubert in /media/16GB/projects/school on master $ git hash-object -w INFO\ 465/Project2/UseCase/Diagrams/Leader\ -\ Time\ \&\ Mileage.vsd bddbd13afd698e5ba7d572c9270e52bcac862661 jim at schubert in /media/16GB/projects/school on master $ git hash-object -w INFO\ 465/Project2/Prototype/WebPrototype/WebPrototype/bin/WebPrototype.dll 2978ec4d75abb8c6bab225d8adfbd2bef064338a
Related posts:
- Mercurial and Git in one repository
- My Review of McCullough and Berglund on Mastering Advanced Git
- Fluent NHibernate error: Unable to cast object of type ‘Oracle.DataAccess.Client.OracleConnection’ to type ‘System.Data.Common.DbConnection’.
- dotfiles backup using GitHub
- words.pl: slogan word generator
- Linux tip: Alias ‘cd’ in bash shell
