将Bitbucket仓库迁移到GitHub时出现pre-receive hook declined错误如何解决
Bitbucket迁移GitHub报错解决方案
pre-receive hook declined报错本质是GitHub目标仓库的前置接收钩子拦截了推送请求,两种方案都失败属于触发了GitHub的仓库限制规则,可按以下步骤排查解决:
1. 排查仓库规则限制
分支保护规则是触发该报错最常见的原因
- 进入GitHub目标仓库的「Settings」→「Branches」→「Branch protection rules」,临时关闭/删除main/master等受保护分支的规则,迁移完成后再重新配置即可。常见拦截规则包括:禁止直接推送分支、要求PR合并、要求提交签名、要求状态检查通过。
- 检查仓库大小是否超限:GitHub单仓库默认存储上限为100GB,单文件大小超过100MB会直接拦截推送。如果存在大文件历史,可先清理再推送:
# 使用BFG清理仓库历史中大于100M的文件 bfg --strip-blobs-bigger-than 100M repository-to-mirror.git # 执行git gc清理无效数据 cd repository-to-mirror.git git reflog expire --expire=now --all && git gc --prune=now --aggressive
2. 校验推送权限
- 确认操作账号对GitHub目标仓库有写入权限,若使用HTTPS协议推送,可检查本地存储的Git凭证是否正确、未过期,也可替换为SSH协议的仓库地址推送,避免凭证校验问题。
3. 调整推送方式
- 若
git push --mirror全量推送失败,可拆分推送步骤定位问题:# 先推送所有分支 git push origin --all # 再推送所有标签 git push origin --tags - 若仓库提交历史过长,可尝试分批推送提交,避免单次推送数据量过大触发平台限流。
4. 内置导入工具失败处理
- 若Bitbucket仓库为私有,导入时需正确填写Bitbucket账号的访问令牌/账号密码,保证GitHub有权限拉取完整仓库内容。
- 可将本地已完成镜像克隆的仓库打包为压缩包,在GitHub导入页选择「Upload your local project」上传导入,比直接填写URL的导入成功率更高。
内容的提问来源于stack exchange,提问作者Vikas Rathore
相关产品推荐
相关产品推荐

