git error
背景
今天在git push代码到远端gitlab服务器的时候,突然断电了。等电力恢复后。发现git出现如下错误。
网上找了些资料,记录下恢复的过程。
lwang@compiler~/repos/master_for_AA-12.09/osdk_repos/package_repos/ok_base-files/lib/okos $ git pull
error: object file ./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190 is empty
error: object file ./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190 is empty
error: object file ./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190 is empty
fatal: loose object 27e3bd4b68fed3cfbb732e859543fd8c6bb42190 (stored in ./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190) is corrupt
修复步骤
- 查找网上资料找到gitlab下仓库的位置/var/opt/gitlab/git-data/repositories/, 我的对应仓库okos/package_repos.git
- 登陆gitlab服务器,使用git用户操作/var/opt/gitlab/git-data下文件,操作前备份一下
sudo su - git
cd /var/opt/gitlab/git-data/repositories/okos/
cp -r package_repos.git{,_bak}
cd pacakge_repos.git
- 检查objects下所有为空的文件,刚好跟出错的几个文件一致,删除它们
find objects -type f -empty
./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190
./objects/ce/6e9df4ce8bc148204e4aa1281850dc8dd32216
./objects/ce/1cbcb1511bd935751d4e3096feb7f95bfa575e
find objects -type f -empty --delete
- 通过在本地仓库的log找到错误commit的上个commit id
llwang@compiler~/repos/master_for_AA-12.09/osdk_repos_old/package_repos $ git log
commit 27e3bd4b68fed3cfbb732e859543fd8c6bb42190
Author: Leilei Wang <leilei.wang@oakridge.io>
Date: Fri Dec 15 09:55:13 2017 +0800
import python-websocket
commit 09122352f4607ba9cd810d57709eb21349e42591
Author: Leilei Wang <leilei.wang@oakridge.io>
Date: Mon Dec 11 10:39:50 2017 +0800
query rediretor again after reset message received
- 将HEAD恢复为上次commit id
git update-ref HEAD 09122352f4607ba9cd810d57709eb21349e42591
- 通过git检查是否还有其它错误
git fsck --full
- 回到本地仓库,通过git pull,git push重新提交。
Reference
git error: object file is empty
gitlab中git仓库的位置
nicephil@gmail.com – 2017-12-15