如何解决推送现有Git项目到GitLab时pre-receive hook declined错误并保留日志
解决方案
错误根因
pre-receive hook declined 错误是你自建的GitLab仓库服务端配置的预接收规则拦截了推送,和本地Git仓库配置无关,无需删除.git目录丢失提交历史。
操作步骤
- 第一步:调整分支保护规则(90%以上的此类问题由此导致)
GitLab默认会对master/main分支开启保护,禁止普通账号(哪怕是管理员)直接推送,需要手动调整配置:- 进入目标私有仓库,依次点击「设置」->「仓库」->「受保护的分支」
- 找到
master分支的保护规则,可选择临时移除保护,或者将当前使用的管理员账号加入「允许推送」「允许强制推送」白名单 - 回到本地仓库重新执行
git push origin master即可
- 第二步:如果调整分支保护后仍推送失败,检查提交规则校验
部分GitLab实例会配置提交信息格式校验、敏感内容校验等规则,原外部仓库的提交不符合规则会被拦截:- 可查看推送失败的完整报错提示,定位不符合校验的提交项
- 使用
git rebase批量调整不符合规则的提交内容,不会丢失提交历史 - 调整完成后重新推送
- 第三步:检查仓库容量限制
若原仓库包含大文件超出你GitLab账号的单仓库容量上限,也会触发钩子拦截:- 清理仓库内的冗余大文件,或使用
git lfs托管大文件 - 确认仓库大小符合上限要求后重新推送
- 清理仓库内的冗余大文件,或使用
- 第四步:分支名称适配
如果你新建的空仓库默认分支为main,本地默认分支为master,可先执行git branch -m master main将本地分支重命名,再执行git push origin main推送,后续可按需调整分支名称。
内容的提问来源于stack exchange,提问作者Jorge Palacios Zaratiegui
相关产品推荐
相关产品推荐

