0%

GitLab服务端文件损坏

问题

    前一天晚上停电导致Git服务器关闭,停电的时候有push代码,导致服务器文件损坏。第二天push代码的时候提示push mater to origin/master was rejected by remote

    查看控制台,显示

1
2
remote: error: object file ./objects/71/7d869c6b441db44debf43f794bbe75a62747bd is empty        
remote: fatal: loose object 717d869c6b441db44debf43f794bbe75a62747bd (stored in ./objects/71/7d869c6b441db44debf43f794bbe75a62747bd) is corrupt

原因分析

由于网络波动,使用的是gitLab HTTP协议来提交的代码,在提交代码时会发生提交的文件在服务端损坏的情况,这个时候客户端应为这个文件损坏而无法pull代码

解决方案

  1. 进入服务器跟目录(这一步很重要)

    1
    cd /
  2. 查出问题项目的仓库目录

    1
    2
    # 这里举例为test.git,在知道目录的情况下这一步可以省略
    find -name hug_interview.git
  3. 修改gitlab目录下git-data的权限

    1
    chmod -R 777 git-data/(默认情况下这个是没有权限可写)
  4. 进入仓库目录报错的文件对应的文件夹

    在git目录下找到objects文件并进入(git提交的文件都会以一个hash值为名字的文件存储在objects目录下)

  5. 文件替换

    找到最后提交代码的开发人员本地仓库找到对应的损坏的文件上传至服务器对应的覆盖文件即可,这里报错的文件目录为

    1
    ./objects/71/7d869c6b441db44debf43f794bbe75a62747bd