一些Git的服务器或托管服务(显然GitHub的企业)不支持浅克隆,相反,他们只是拖延时,像下面这样的请求被发送:如何检测Git服务器是否支持浅层克隆?
git clone --depth 1 https://server/user/repo.git
有没有一种方法来检测服务器是否支持浅克隆与否?有没有可以发送给服务器的Git或CURL命令来确定它是否支持浅层克隆?
我找到了Git Protocol Capabilities的引用,这是我需要寻找的吗?我怎样才能掌握服务器的功能?
一些Git的服务器或托管服务(显然GitHub的企业)不支持浅克隆,相反,他们只是拖延时,像下面这样的请求被发送:如何检测Git服务器是否支持浅层克隆?
git clone --depth 1 https://server/user/repo.git
有没有一种方法来检测服务器是否支持浅克隆与否?有没有可以发送给服务器的Git或CURL命令来确定它是否支持浅层克隆?
我找到了Git Protocol Capabilities的引用,这是我需要寻找的吗?我怎样才能掌握服务器的功能?
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
我已经读了很多关于智能协议,但我不知道这会有所帮助。我试着对GitHub(不是企业版)运行SSH'git-receive-pack'命令,它不发送'shallow'功能,但GitHub支持浅层克隆,没有任何问题。 – nwinkler 2015-04-02 07:36:57
我同意。我只是想给出一些线索,开始寻找在服务器端管理浅层克隆的位置和方式。 – VonC 2015-04-02 07:41:52
谢谢 - 这似乎是一个相当复杂的话题,我完全被难倒为什么GitHub企业似乎并没有干净地支持这一点。 – nwinkler 2015-04-02 07:43:30