Git клон голого репо без капель

В моем git-репозитории я использую алгоритм для назначения каждой фиксации одного или нескольких уникальных номеров версий на основе имен веток и тегов. Я хочу использовать этот механизм с другим большим хранилищем, которое я хотел бы клонировать без передачи каких-либо файлов.

Чистый клон помогает мне избавиться от рабочей копии больших двоичных объектов, но все равно загружает их с сервера. Мелкий клон с --depth 1 пропускает большинство BLOB-объектов, но также пропускает загрузку метаданных для всех коммитов, кроме одного.

Есть ли что-то вроде git fast-export --no-data что я могу использовать на стороне клиента, чтобы получить графическую информацию, содержащую метаданные коммита и, возможно, имена файлов без предварительного клонирования хранилища с моего сервера? В идеале я мог бы получить доступ к метаданным, как и любой другой (голый, мелкий) репо через git log|show|rev-parse|show-ref,

(Я знаю, что git LFS и git Annex существуют и могут помочь уменьшить размер некоторых репозиториев, но я не могу использовать их в существующем репозитории, не изменив его.)

1 ответ

Решение

Есть ли что-то вроде git fast-export --no-data, которое я могу использовать на стороне клиента?

Нет: рядом git ls-remote (который получает метаданные только для руководителей удаленного репо), все остальное получит полную историю репо.

Чтобы запросить метаданные без данных, вам потребуется ваше хранилище, управляемое хостинг-службой Git, такой как GitHub, предоставляющей API (например, API-интерфейс фиксации).

Другая идея для этого некоторое время спустя: с 2017 года пакет-протокол теперь позволяет частичное клонирование, и есть--filter=blob:noneдоступно, которое исключает все капли - этого должно быть достаточно на стороне сервера.

К сожалению, с учетом текущей реализации на стороне сервера это работает не так хорошо, как можно было бы надеяться:

C:\Users\phi1010>git clone https://github.com/torvalds/linux.git --filter=blob:none
Cloning into 'linux'...
warning: filtering not recognized by server, ignoring
remote: Enumerating objects: 6876195, done.
[...]

Github даже объявил о поддержке протокола v2 и его возможностей фильтрации, но это не работает с-c protocol.version=2, как также указано в разделе Поддерживают ли GitHub и GitLab параметр git clone --filter?

Другие вопросы по тегам