TortoiseHg启用hggit推送Mercurial仓库到GitLab认证失败如何解决
问题原因
出现HTTP Basic: Access denied认证失败,和你输入的账号密码正确性无关,核心原因有3个:
- 你本地能正常执行
git add -p、git commit -p是因为这两个命令都是纯本地操作,根本不需要触发远程仓库认证逻辑,执行成功不代表远程认证配置正常。 - 目前GitLab已全面禁止HTTP协议下直接使用账号密码做推送认证,所有HTTP推送必须使用个人访问令牌(PAT)作为认证密码,哪怕你输入的账号登录密码完全正确,也会被服务端直接拒绝。
- TortoiseHg的hggit扩展走的是Mercurial自身的认证链路,不会自动读取Git全局配置里的凭证存储信息,哪怕你本地Git本身已经配置好可正常推拉的凭证,hggit推送时也无法调用,会反复弹出凭证输入框;如果系统凭据管理器里存过之前输错的旧GitLab凭证,还会自动携带错误凭证发起请求,直接触发认证失败。
解决步骤
按以下顺序操作即可解决问题:
- 先生成对应权限的GitLab个人访问令牌:在GitLab个人设置里找到访问令牌生成入口,创建一个勾选了
read_repository、write_repository权限的令牌,记好生成的令牌字符串,关闭页面后无法二次查看。 - 清理系统内存储的错误旧凭证:Windows系统打开「凭据管理器- Windows凭据」,找到所有和你使用的GitLab域名相关的Git、Mercurial类凭据全部删除;macOS系统打开「钥匙串访问」,搜索对应GitLab域名的网络凭据全部删除,避免旧凭证干扰请求。
- 二选一配置认证信息即可:
- 直接修改hggit绑定的Git远程地址,把地址改成带令牌的格式:
https://<你的GitLab用户名>:<刚才生成的个人访问令牌>@<GitLab域名>/<仓库路径>.git,修改完成后直接执行推送即可,不会再弹出凭证输入框。 - 如果不想把令牌写在远程地址里,就修改Mercurial全局配置文件(Windows在用户目录下的
mercurial.ini,macOS/Linux在用户目录下的.hgrc),在配置中添加如下段:
保存配置后重启TortoiseHg,再执行推送即可正常认证。[auth] gitlab-repo.prefix = https://<你使用的GitLab域名>/ gitlab-repo.username = <你的GitLab用户名> gitlab-repo.password = <刚才生成的个人访问令牌> gitlab-repo.schemes = https
- 直接修改hggit绑定的Git远程地址,把地址改成带令牌的格式:
内容的提问来源于stack exchange,提问作者Vincent BUQUOY-BLANC
相关产品推荐
相关产品推荐

