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?