Authentication
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://username@test.git.unsw.edu.au': * 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
Git 似乎只使用
CURLAUTH_ANY
不適用於我的特定 Web 伺服器的。我的 Web 伺服器支持Negotiate
andBasic
,因此 Git 不會回退到客戶端不可用時Basic
。Negotiate
此外,Git 似乎沒有其他選項可以使用
CURLAUTH_ANY
.
查看手冊頁,似乎 git 在與 http 一起使用時沒有使用使用者名選項。但是如果你把它放在你的 .netrc 文件中,curl 應該使用它。.netrc 的格式是
machine hostname login yourusername password yourpassword