Как определить, поддерживает ли сервер Git мелкое клонирование?

Некоторые серверы Git или хостинговые службы (очевидно, GitHub Enterprise) не поддерживают неглубокие клоны, вместо этого они просто останавливаются при отправке запроса, подобного следующему:

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

Есть ли способ определить, поддерживает ли сервер мелкое клонирование или нет? Есть ли команда Git или CURL, которую я могу отправить на сервер, чтобы узнать, поддерживает ли она мелкое клонирование или нет?

Я нашел ссылку на возможности протокола Git, это то, что мне нужно искать? Как я могу овладеть возможностями сервера?

1 ответ

Решение

Умный протокол делает некоторую рекламу

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 имеют параметры, относящиеся к мелкой возможности, но не ясно, будут ли они объявлены так же, как в приведенной выше команде ssh.

git 1.6.6 обновил протокол передачи packfile, включая раздел " Обнаружение ссылок":

При первоначальном подключении клиента сервер сразу же ответит перечислением каждой имеющейся у него ссылки (все ветви и теги) вместе с именем объекта, на которое в настоящий момент указывает каждая ссылка.

$ 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
Другие вопросы по тегам