LINUX.ORG.RU

Как выкачать определенный pack-файл с Git-репозитария?

 , gitfs,


0

4

Сижу сейчас на мобильном интернете.

У меня в локальной копии репозитария оказался поломанный pack-файл. Я бы мог перевыкачать весь репозитарий, но размер репозитария несколько гигабайт.

Я знаю точно название pack-файла, и мне надо выкачать только его:

.git/objects/pack/pack-dd181d6ed4ebbcf10347fb0908a2f644ef40b993.pack

Вопрос: как это сделать? Репозитарий на Гитхабе.

★★★★★

Последнее исправление: Xintrea (всего исправлений: 2)

IIRC, pack-файлы не обязательно совпадают между репозиториями. Это локальная оптимизация места.

Официальные API позволяют только доступ к блобам и рефам: https://docs.github.com/en/rest/reference/git

Pack-файлы пересылаются при первоначальном скачивании репозитория, так что к ним по идее можно получить доступ через dumb-протокол. Это если такие pack-файлы есть в удалённом репозитории, а не были созданы локально. Но, к сожалению, GitHub отключил у себя dumb-протокол.

Smart-протокол даёт доступ только к рефам, а не к произвольным объектам репозитория.

https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols

ilammy ★★★
()

Предлагаю поэкспериментировать на копии репозитория. Что будет, если переместить .git/objects/pack/pack-dd181d6ed4ebbcf10347fb0908a2f644ef40b993.pack и .git/objects/pack/pack-dd181d6ed4ebbcf10347fb0908a2f644ef40b993.idx куда-нибудь в сторону и запустить git fetch? По идее, fetch достаточно умён, чтобы выкачать все недостающие объекты с remote.

Альтернатива: каким-то образом распарсить .idx, вытащить из него бывших в .pack объектов и вручную скачать их в .git/objects при помощи git-fetch-pack.

anonymous
()

Сижу сейчас на мобильном интернете.

Скачать на свой сервер (у вас ведь есть свой сервер?) подключаясь по SSH со сжатием - весь репозитарий, а потом оттуда передать себе нужный pack файл каким-нибудь rsync’ом уже на локальную машину. В итоге потратите трафика по размеру пак-файла + пару лишних сотен килобайт на SSH. А если повезёт и pack файл не утерян а просто не сильно поврежден (не дописан, например), то rsync вам передаст по сети только разницу между файлами.

Репозитарий на Гитхабе.

Тут нет гарантий что гитхаб выдаст вам такие-же объекты на выходе.

DawnCaster ★★
()
Последнее исправление: DawnCaster (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.