Коммит в пакете
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