某些Git服务器或托管服务(显然是GitHub Enterprise)不支持浅克隆,而是在发送如下请求时停止:
git clone --depth 1 https://server/user/repo.git
有没有办法检测服务器是否支持浅层克隆?是否有Git或CURL命令可以发送到服务器以确定它是否支持浅层克隆?
我找到了对Git Protocol Capabilities的引用,这是我需要查找的内容吗?如何掌握服务器的功能?
答案 0 :(得分:2)
The smart protocol做一些广告
ssh -x git@server "git-receive-pack 'simplegit-progit.git'"
005bca82a6dff817ec66f4437202690a93763949 refs/heads/master report-status \
delete-refs side-band-64k quiet ofs-delta \
agent=git/2:2.1.1+github-607-gfba4028 delete-refs
git-receive-pack命令立即响应当前每个引用的一行 - 在这种情况下,只是主分支及其SHA-1。 第一行还有一个服务器功能列表(此处为report-status,delete-refs,以及其他一些功能,包括客户端标识符)。
git远程助手有options related to the shallow capability,但不清楚它们是否会像上面的ssh命令一样进行广告宣传。
git 1.6.6更新了packfile传输协议,包括“Reference Discovery”部分:
当客户端最初连接服务器时会立即响应 列出了每个参考文献(所有分支和标签) 使用每个引用当前指向的对象名称。
$ echo -e -n "0039git-upload-pack /schacon/gitbook.git\0host=example.com\0" |
nc -v example.com 9418
00887217a7c7e582c46cec22a130adf4b9d7d950fba0 HEAD\0multi_ack thin-pack
side-band side-band-64k ofs-delta shallow no-progress include-tag
00441d3fcd5ced445d1abc402225c0b8a1299641f497 refs/heads/integration
003f7217a7c7e582c46cec22a130adf4b9d7d950fba0 refs/heads/master
003cb88d2441cac0977faf98efc80305012112238d9d refs/tags/v0.9
003c525128480b96c89e6418b1e40909bf6c5b2d580f refs/tags/v1.0
003fe92df48743b7bc7d26bcaabfddde0a1e20cae47c refs/tags/v1.0^{}
0000