2015-04-02 110 views
3

一些Git的服务器或托管服务(显然GitHub的企业)不支持浅克隆,相反,他们只是拖延时,像下面这样的请求被发送:如何检测Git服务器是否支持浅层克隆?

git clone --depth 1 https://server/user/repo.git 

有没有一种方法来检测服务器是否支持浅克隆与否?有没有可以发送给服务器的Git或CURL命令来确定它是否支持浅层克隆?

我找到了Git Protocol Capabilities的引用,这是我需要寻找的吗?我怎样才能掌握服务器的功能?

回答

2

The smart protocol做一些广告

ssh -x [email protected] "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 

的混帐接收包命令立即用一个线对它所拥有的每一个引用响应 - 在这种情况下,只是主分支和它的SHA-1。
第一行还有一个服务器功能列表(这里是report-status,delete-refs和其他一些列表,包括客户端标识符)。

git远程助手有options related to the shallow capability,但是不清楚他们会以与上面的ssh命令相同的方式通告。

git 1.6.6更新打包文件传输协议,包括一个“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 
+0

我已经读了很多关于智能协议,但我不知道这会有所帮助。我试着对GitHub(不是企业版)运行SSH'git-receive-pack'命令,它不发送'shallow'功能,但GitHub支持浅层克隆,没有任何问题。 – nwinkler 2015-04-02 07:36:57

+0

我同意。我只是想给出一些线索,开始寻找在服务器端管理浅层克隆的位置和方式。 – VonC 2015-04-02 07:41:52

+0

谢谢 - 这似乎是一个相当复杂的话题,我完全被难倒为什么GitHub企业似乎并没有干净地支持这一点。 – nwinkler 2015-04-02 07:43:30