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 中,我看到:
- 读
.netrc
GET /repo/info/refs?service=git-receive-pack HTTP/1.1
- 没有凭证HTTP/1.0 401 Unauthorized
- 读
.netrc
GET /repo/info/refs?service=git-receive-pack HTTP/1.0
- 没有凭证HTTP/1.0 401 Unauthorized
- 提示输入密码
- 读
.netrc
* Couldn't find host test.git.unsw.edu.au in the .netrc file; using defaults
GET /repo/info/refs?service=git-receive-pack HTTP/1.1
- 没有凭证HTTP/1.0 401 Unauthorized
答案1
Git 似乎只使用 ,CURLAUTH_ANY
而无法与我的特定 Web 服务器配合使用。我的 Web 服务器支持Negotiate
和,因此当客户端上不可用时Basic
,Git 不会回退到。Basic
Negotiate
此外,Git 似乎没有选择使用除 之外的任何其他选项CURLAUTH_ANY
。
答案2
查看手册页,似乎 git 在与 http 一起使用时不采用用户名选项。但如果你把它放在 .netrc 文件中,curl 应该会使用它。.netrc 的格式为
machine hostname login yourusername password yourpassword