git 拒绝通过 HTTP 发送凭据

git 拒绝通过 HTTP 发送凭据

curl似乎运行正常,但git实际上并非如此。git要求输入密码,但不发送任何凭据。

作品:curl --netrc http://test.git.unsw.edu.au/curl -u username:password http://test.git.unsw.edu.au/

不起作用:git remote update

Password for 'http://[email protected]': 
* Couldn't find host test.git.unsw.edu.au in the .netrc file; using defaults
User-Agent: git/1.7.9.5
Host: test.git.unsw.edu.au
Accept: */*
Pragma: no-cache

为什么不git发送凭证?

从 strace 中,我看到:

  1. .netrc
  2. GET /repo/info/refs?service=git-receive-pack HTTP/1.1- 没有凭证
  3. HTTP/1.0 401 Unauthorized
  4. .netrc
  5. GET /repo/info/refs?service=git-receive-pack HTTP/1.0- 没有凭证
  6. HTTP/1.0 401 Unauthorized
  7. 提示输入密码
  8. .netrc
  9. * Couldn't find host test.git.unsw.edu.au in the .netrc file; using defaults
  10. GET /repo/info/refs?service=git-receive-pack HTTP/1.1- 没有凭证
  11. HTTP/1.0 401 Unauthorized

答案1

Git 似乎只使用 ,CURLAUTH_ANY而无法与我的特定 Web 服务器配合使用。我的 Web 服务器支持Negotiate和,因此当客户端上不可用时Basic,Git 不会回退到。BasicNegotiate

此外,Git 似乎没有选择使用除 之外的任何其他选项CURLAUTH_ANY

答案2

查看手册页,似乎 git 在与 http 一起使用时不采用用户名选项。但如果你把它放在 .netrc 文件中,curl 应该会使用它。.netrc 的格式为

machine hostname login yourusername password yourpassword

相关内容