GitLab迁移后执行git push origin main报错401 Unauthorized求助
问题描述
近期完成GitLab服务器迁移,网页访问仓库结构正常,但执行git push origin main时出现报错,具体信息如下:
lucas_a@NB04 MINGW64 /c/temp/git/aulagitlab (main) $ git push origin main Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 224 bytes | 74.00 KiB/s, done. Total 2 (delta 1), reused 0 (delta 0), pack-reused 0 remote: GitLab: 401 Unauthorized To gitlab.domain.com.br:tecnica/aulagitlab.git ! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to 'gitlab.domain.com.br:tecnica/aulagitlab.git'
已检查仓库权限、禁用Git LFS,仍无法解决。
解决步骤
清理并重新配置本地Git凭据
迁移后服务器认证信息变更,本地存储的旧凭据可能失效:- Windows:打开「凭据管理器」→「Windows凭据」,找到Git相关的条目删除,重新执行push时输入新的认证信息。
- Linux/macOS:执行
git credential-manager erase,按提示输入服务器地址、用户名,清除旧凭据后重新push。
确认远程仓库地址正确性
执行git remote -v查看origin地址是否指向新GitLab服务器,若地址错误,执行git remote set-url origin gitlab.domain.com.br:tecnica/aulagitlab.git更新为正确地址。使用个人访问令牌(PAT)替代密码认证
GitLab多数场景已禁用密码直接认证,需生成具备write_repository权限的PAT:- 登录新GitLab网页,进入「用户设置」→「访问令牌」;
- 勾选
write_repository权限,生成令牌; - 执行push时,用户名填GitLab账号,密码填入生成的PAT。
检查服务器端pre-receive钩子
报错提示pre-receive hook declined,需排查仓库钩子:- 登录GitLab服务器,找到对应仓库的
hooks目录(通常在/var/opt/gitlab/git-data/repositories/tecnica/aulagitlab.git/hooks); - 检查
pre-receive脚本的权限(需设置为chmod +x pre-receive),以及脚本内配置是否指向旧服务器; - 可暂时重命名
pre-receive为pre-receive.bak,测试能否正常push,若可以则说明钩子脚本存在问题。
- 登录GitLab服务器,找到对应仓库的
验证SSH密钥配置(若使用SSH方式)
若远程地址为SSH格式:- 检查本地
~/.ssh/id_rsa.pub内容是否已添加到新GitLab账号的「SSH密钥」列表中; - 确认服务器端
sshd配置允许密钥认证,本地SSH配置无错误指向。
- 检查本地
内容的提问来源于stack exchange,提问作者Lucas Alves
相关产品推荐
相关产品推荐

