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/refs
  • HEAD
  • objects/<he..>/<..ad-commit-identifier>
  • и все остальные объекты, до которых клиент может добарться

Допустим какой-то из объектов вернул 404, тогда работа по нему ведётся так:

  • object/info/http-alternates — тут может вернуться список форков, в которых можно тоже посмотреть.

Если форков нет, то лезем в «pack» файл, а для этого сначала получим список pack файлов:

  • objects/info/packs
  • objects/pack/pack-<pack-id>.idx — индекс пак-файла
  • objects/pack/pack-<pack-id>.pack — сам пак-файл

Дальше мы можем запрашивать остальные объекты, причём поскольку мы уже скачали некоторые пак-файлы, то искать мы можем прямо в них и лишних запросов на сервер не делать.

Мастером становится коммит, на который указывал HEAD.

The Smart Protocol

Тут оригинал столь прекрасен, что ни добавить, ни убавить.

Protocols Summary

В работе гита много всего интересного, но это выходит за пределы книги. Любопытных приглашают в исходный код гита.