嗨!
有没有办法在不先克隆的情况下获取存储在 git 包中的所有提交的列表?
获得头脑很容易,但我找不到一种方法来获取完整的日志。
如果不编写一些专门的软件来遍历捆绑包中的包,这是不可能的。如果捆绑包是使用负引用创建的,则它可能包含仅使用捆绑包中的对象无法解析的增量(捆绑包中嵌入的包可能很薄)。
克隆包(至少是裸克隆)将拆分 refs 并索引包,生成标准 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的回答中所建议的那样,从捆绑包中获取仍然是最简单的解决方案。
其他任何事情(意味着不从捆绑中克隆/获取)都将涉及解码git bundle
格式。
使用 Git 2.25.1(2020 年 2 月)更容易做到这一点,因为捆绑格式的技术细节已经记录在案。
请参阅Masaya Suzuki ( ) 的提交 7378ec9(2020 年 2 月 7 日)。(由Junio C Hamano 合并——在提交 e99c325中,2020 年 2 月 12 日)见讨论。draftcode
gitster
doc
: 描述 Git 包格式签字人:铃木雅也
捆绑包格式没有记录。用 ABNF 描述格式并解释每个部分的含义。
(ABNF:Augmented Backus-Naur 形式,一种基于Backus-Naur 形式(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