Итак, ответ следующий (что я выяснил):
В этих шагах предполагается, что для вашего git-репо настроен HTTP-доступ с помощью команды update-server-info, настроенной в качестве перехвата после получения (и, возможно, других вещей, поскольку я использую git-репо, настроенный github. ком). HTTP также может быть HTTPS.
HTTP GET / info / refs
Этот файл будет содержать что-то вроде:
4462ced0a4be2135c009ba6224c2191c7a3f844a refs/heads/master
HTTP GET / objects / 44 / 62ed0a4be2135c009ba6224c2191c7a3f844a
Распакуйте этот файл, используя zlib.
Этот файл будет содержать что-то вроде:
commit 219
tree 0d4f34f97d76e54666751a850e9300e8b23c1adb
parent fca1c898e2b4a43c66f211bd3547dc301511721d
author yourname <yourname@email.com> 1295905469 -0800
committer yourname <yourname@email.com> 1295905469 -0800
added a/a.txt.
Возьмите дерево SHA1 на вершине.
HTTP GET / objects / 0d / 4f34f97d76e54666751a850e9300e8b23c1adb
Распакуйте этот файл с помощью zlib.
Этот файл будет содержать что-то вроде:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 74 72 65 65 20 39 35 00 31 30 30 36 34 34 20 32 tree 95.100644 2
00000010 2E 74 78 74 00 1F D1 48 91 80 32 74 3B 3B 79 DB .txt..ÑH‘€2t;;yÛ
00000020 57 3C 63 A5 D4 53 08 98 08 31 30 30 36 34 34 20 W<c¥ÔS.˜.100644
00000030 52 45 41 44 4D 45 00 FF 80 47 81 C4 74 A0 6B D0 README.ÿ€G.Ät kÐ
00000040 55 99 5E 48 C3 07 99 BC 6A B6 5A 34 30 30 30 30 U™^HÃ.™¼j¶Z40000
00000050 20 61 00 1A 60 2D 9B D0 7C E5 27 2D DA A6 4E 21 a..`-›Ð|å'-Ú¦N!
00000060 DA 12 DB CA 2B 8C 9F Ú.ÛÊ+ŒŸ
Формат этого файла следующий:
tree<space>##<NULL><object type id><space><filename><NULL><SHA1>
Этот шаблон повторяется.
Возьмите первый SHA1 из этого примера (1fd148918032743b3b79db573c63a5d453089808).
HTTP GET / objects / 1f / d148918032743b3b79db573c63a5d453089808
Распакуйте этот файл с помощью zlib.
Этот файл будет содержать что-то вроде следующего:
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 62 6C 6F 62 20 36 00 61 64 73 66 0A 32 blob 6.adsf.2
И там у вас есть содержимое отдельного файла (чей путь вы отслеживали, и чье имя вы знаете из списка дерева ранее). Этот файл имеет префикс мета-информации, который в данном случае:
blob 6<NULL><file content>
Примечание. Если нужный файл находится в подкаталоге корня репозитория, запись в объектном файле дерева будет иметь идентификатор типа объекта дерева (в данном случае это 040000). Вы можете взять SHA1 этого объекта дерева, HTTP получить его, затем распаковать его, просмотреть содержимое и повторять этот процесс, пока не перейдете к нужному файлу, а затем получить содержимое файла, используя его SHA1 (как в предыдущем шаг), и вот, пожалуйста.