我尝试使用dumb http protocol在我们公司的内部网服务器上共享git仓库,Git Clone - Repository not found应该只需要文件访问权限,但它失败了
fatal: repository 'http://my-url/repo.git' not found
但是在Firefox中粘贴相同的链接会给我带有branches/
,config
,description
,HEAD
等的裸回购索引所有目录和文件都是可读的。
事实上,如果我使用wget以递归方式下载整个内容,我可以在本地git clone
,因此所有必需的文件似乎都可以无问题地访问。
$ wget -r --no-parent --reject "index.html*" http://my-url/repo.git
$ git clone repo.git test
Cloning into 'test'...
done.
继续调试我尝试使用GIT_CURL_VERBOSE
和GIT_TRACE
详细输出:
$ GIT_CURL_VERBOSE=1 GIT_TRACE=1 git clone http://my-url/repo.git test
trace: built-in: git 'clone' 'http://my-url/repo.git' 'test'
Cloning into 'test'...
trace: run_command: 'git-remote-http' 'origin' 'http://my-url/repo.git'
* Couldn't find host my-url in the .netrc file; using defaults
* About to connect() to my-url port 80 (#0)
* Trying <ip>...
* Connected to my-url (<ip>) port 80 (#0)
> GET /repo.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.3.1
Host: my-url
Accept: */*
Accept-Encoding: gzip
Pragma: no-cache
< HTTP/1.1 404 Not Found
< Date: Fri, 04 Sep 2015 13:41:56 GMT
< Server: Apache/2.2.15 (Red hat)
< shortcut-icon: /images/logo.ico
< Content-Length: 346
< Content-Type: text/html; charset=iso-8859-1
< X-Cache: MISS from my-url
<
* Connection #0 to host my-url left intact
fatal: repository 'http://my-host/repo.git/' not found
对我而言,看起来它在尝试&#34; smart&#34;之后就放弃了。 http协议。那么,发生了什么?从我能够收集到的愚蠢的http协议还没有被删除。为什么git
在尝试智能http后会放弃?
详情
git update-server-info
。user.name
和user.email
。env | grep GIT
为空https
的结果相同。编辑: 更新了https(相同)的结果
类似的问题,但没有在这种情况下有帮助的答案:
git clone
over HTTP Fails with “repository not found”
也类似,但接受的答案使用&#34; smart http&#34;协议。 tutorial
答案 0 :(得分:4)
看来你必须跑:
git update-server-info
在通过http。
提供回购之前您还需要打开更新后的挂钩:
mv hooks/post-update.sample hooks/post-update
每当新的更改被推送到回购时,都会重新运行 git update-server-info 。
有关详细信息,请参阅“Dumb http”部分:
https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols
答案 1 :(得分:3)
TL; DR:手动提供禁用&#34; smart&#34;的选项http协议:
$ GIT_SMART_HTTP=0 git clone http://my-dumb-http-server/repo.git
但据说 https://git-scm.com/book/ch4-1.html:
如果服务器没有响应Git HTTP智能服务,Git客户端将尝试回退到更简单的“哑”HTTP协议。
出于某种原因,似乎并非如此。但是在深入研究代码后,我发现他们检查了GIT_SMART_HTTP
环境变量,并通过设置git clone
让GIT_SMART_HTTP=0
工作。