gpt4 book ai didi

git - 如何检测Git服务器是否支持浅克隆?

转载 作者:太空狗 更新时间:2023-10-29 14:13:00 27 4
gpt4 key购买 nike

一些 Git 服务器或托管服务(显然是 GitHub Enterprise)不支持浅克隆,相反,它们会在发送如下请求时停止:

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

有没有办法检测服务器是否支持浅克隆?是否可以向服务器发送 Git 或 CURL 命令以查明它是否支持浅克隆?

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

最佳答案

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

The git-receive-pack command immediately responds with one line for each reference it currently has – in this case, just the master branch and its SHA-1.
The first line also has a list of the server’s capabilities (here, report-status, delete-refs, and some others, including the client identifier).

git 远程助手有 options related to the shallow capability ,但不清楚它们是否会以与上述 ssh 命令相同的方式被公布。

git 1.6.6更新了包文件传输协议(protocol),包括“Reference Discovery”部分:

When the client initially connects the server will immediately respond with a listing of each reference it has (all branches and tags) along with the object name that each reference currently points to.

$ 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

如今(Git 2.23,2019 年第三季度,4 年后),git fetch -v -v 足以显示任何支持的功能。

参见 commit 0e04297 , commit 5a88583 , commit 0778b29 (2019 年 6 月 20 日)作者 Nguyễn Thái Ngọc Duy (pclouds) .
(由 Junio C Hamano -- gitster -- merge 于 commit b49d337 ,2019 年 7 月 9 日)

fetch-pack: print server version at the top in -v -v

Before the previous patch, the server version is printed after all the "Server supports" lines.
The previous one puts the version in the middle of "Server supports" group.

Instead of moving it to the bottom, I move it to the top.
Version may stand out more at the top as we will have even more debug out after capabilities.

fetch-pack: print all relevant supported capabilities with -v -v

When we check if some capability is supported, we do print something in verbose mode.
Some capabilities are not printed though (and it made me think it's not supported; I was more used to GIT_TRACE_PACKET) so let's print them all.

It's a bit more code. And one could argue for printing all supported capabilities the server sends us. But I think it's still valuable this way because we see the capabilities that the client cares about.

关于git - 如何检测Git服务器是否支持浅克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com