10.6. Transfer Protocols
Это типа конспект, который я веду для себя, чтобы получше разобраться и запомнить. Вероятно, вам лучше сразу читать оригинал: 10.6 Transfer Protocols.
Эээксперименты
В одной из предыдущих глав мы вытаскивали единственный коммит из chromium репозитория. Стоит попробовать вытащить его ручками через Dumb и Smart протоколы.
Собственно, конспект
The Dumb Protocol
Это когда папка с репозиторием просто доступна на чтение через веб-сервер.
Чтобы тупой протокол работал, на серверном репозитории должен быть актуальным файл info/refs. Чтобы этот файл создать, используется команда git update-server-info.
Чтобы он был актуальным, эту команду вызывают в хуке post-update или post-receive.
Последовательность чтения файлов клиентом такая:
info/refsHEADobjects/<he..>/<..ad-commit-identifier>- и все остальные объекты, до которых клиент может добарться
Допустим какой-то из объектов вернул 404, тогда работа по нему ведётся так:
object/info/http-alternates— тут может вернуться список форков, в которых можно тоже посмотреть.
Если форков нет, то лезем в «pack» файл, а для этого сначала получим список pack файлов:
objects/info/packsobjects/pack/pack-<pack-id>.idx— индекс пак-файлаobjects/pack/pack-<pack-id>.pack— сам пак-файл
Дальше мы можем запрашивать остальные объекты, причём поскольку мы уже скачали некоторые пак-файлы, то искать мы можем прямо в них и лишних запросов на сервер не делать.
Мастером становится коммит, на который указывал HEAD.
The Smart Protocol
Тут оригинал столь прекрасен, что ни добавить, ни убавить.
Protocols Summary
В работе гита много всего интересного, но это выходит за пределы книги. Любопытных приглашают в исходный код гита.