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

修复步骤

  1. 查找网上资料找到gitlab下仓库的位置/var/opt/gitlab/git-data/repositories/, 我的对应仓库okos/package_repos.git
  2. 登陆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
  1. 检查objects下所有为空的文件,刚好跟出错的几个文件一致,删除它们
find objects -type f -empty
./objects/27/e3bd4b68fed3cfbb732e859543fd8c6bb42190
./objects/ce/6e9df4ce8bc148204e4aa1281850dc8dd32216
./objects/ce/1cbcb1511bd935751d4e3096feb7f95bfa575e
find objects -type f -empty --delete

  1. 通过在本地仓库的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

  1. 将HEAD恢复为上次commit id
 git update-ref HEAD 09122352f4607ba9cd810d57709eb21349e42591
  1. 通过git检查是否还有其它错误
git fsck --full
  1. 回到本地仓库,通过git pull,git push重新提交。

Reference

git error: object file is empty
gitlab中git仓库的位置

nicephil@gmail.com – 2017-12-15

posted on 2017-12-15 16:57  nicephil  阅读(327)  评论(0编辑  收藏  举报

导航