http 身份验证不适用于 TortoiseGit

http auth does not work with TortoiseGit

每次我尝试使用 TortoiseGit 从我们的远程 gogs 存储库克隆任何存储库时,我都会收到 401(未经授权)。

使用 http://user:pw@ex.ample.com/user/repo.git 作为结帐 url 也不起作用。
ssh 不是一个选项。在禁用 http 身份验证的情况下一切正常。

简化的 nginx 配置:

server {
        listen 80;
        listen [::]:80;
        server_name ex.ample.com;
                location / {
                        auth_basic "Restricted Content";
                        auth_basic_user_file /var/www/gogs/.htpasswd;
                        proxy_pass http://localhost:3000/;
                }
}

所以我的问题是:如何配置 TortoiseGit 以发送有效的 http 身份验证?

编辑:似乎只影响私人仓库,public 仓库是可访问的。
Edit2:推送到 public repos 在 http auth 后面也是不可能的。

解决方案:使用反向代理的 https 行为异常,因此 repo url 和 push url 必须与纯 http 一起使用。可能这里需要一些 nginx tweeking。

Git 是一个 "stupid content tracker"。它只是跟踪内容,不提供或要求任何身份验证或授权。

如果您需要任何身份验证 and/or 授权,您需要以某种方式将其置于顶部。

如果您使用 gogs,您需要在那里配置身份验证或从您的 nginx 代理传递用户名(参见 https://github.com/gogits/gogs/issues/165, https://github.com/gogits/gogs/issues/2170, https://github.com/gogits/gogs/pull/3785, ...)。

有关使用 http 访问服务器 Git 的其他方法,请参阅 How to serve GIT through HTTP via NGINX with user/password? or http://gitolite.com/gitolite/http/


旧答案:

基本身份验证只能有一个身份验证,不能有两个甚至更多。

唯一的例外是代理身份验证(http 状态代码 407,它是使用不同的 header 完成的)。

您可以尝试通过代理凭据将您的基本身份验证凭据转发到您的其他服务器 https://serverfault.com/q/511206/237109 或尝试在您的 nginx 配置中提供静态凭据。