Коммит в пакете

Hy!

Есть ли способ получить список всех коммитов, хранящихся в git-комплекте, без предварительного клонирования?

Получить головы легко, но я не мог найти способ получить полный журнал из этого.

1 ответ

Решение

Невозможно без написания специального программного обеспечения пройти через пакет, включенный в комплект. Если пакет был создан с отрицательными ссылками, возможно, он будет содержать дельты, которые не могут быть разрешены с использованием только объектов в пакете (пакет, встроенный в пакет, может быть тонким).

Клонирование пакета (по крайней мере, для простого клона) будет разделять ссылки и индексировать пакет, создавая формат, с которым могут работать стандартные команды git, так что это самый простой способ (с точки зрения интеграции) прочитать его.

Одна вещь, которую вы можете сделать, чтобы "просмотреть" пакет перед объединением, - это просто добавить его в качестве удаленного репо, а затем вы можете извлечь его и получить доступ к ссылкам отслеживания. Так что-то вроде:

git remote add bundle /path/to/bundle
git remote update bundle

и теперь вы можете сделать gitk master...bundle/master и т.д., чтобы сравнить ветки в комплекте с вашим локальным репо, и, наконец, git pull bundle master слить это в.

Как только вы закончите, просто уберите с git remote rm bundle

Извлечение из пакета, как это было предложено в araqnid"s ответа, остается самым простым решением.

Все остальное (то есть без клонирования / извлечения из пакета) потребует декодирования git bundleформат.
Это немного проще сделать с помощью Git 2.25.1 (февраль 2020 г.), поскольку технические детали формата пакета задокументированы.

См. Коммит 7378ec9 (7 февраля 2020 г.) Масая Судзуки (draftcode).
(Слияние Junio ​​C Hamano -gitster- в коммите e99c325, 12 февраля 2020 г.)
См. обсуждение.

doc: описать формат пакета Git

Подписано: Масая Судзуки

Формат пакета не задокументирован. Опишите формат с помощью ABNF и объясните значение каждой части.

( ABNF: расширенная форма Бэкуса-Наура, метаязык, основанный на форме Бэкуса-Наура (BNF), но состоящий из собственного синтаксиса и правила вывода)

Видеть Documentation/technical/bundle-format.txt для большего:

bundle    = signature *prerequisite *reference LF pack
signature = "# v2 git bundle" LF

prerequisite = "-" obj-id SP comment LF
comment      = *CHAR
reference    = obj-id SP refname LF

pack         = ... ; packfile
Другие вопросы по тегам