10

嗨!

有没有办法在不先克隆的情况下获取存储在 git 包中的所有提交的列表?

获得头脑很容易,但我找不到一种方法来获取完整的日志。

4

2 回答 2

7

如果不编写一些专门的软件来遍历捆绑包中的包,这是不可能的。如果捆绑包是使用负引用创建的,则它可能包含仅使用捆绑包中的对象无法解析的增量(捆绑包中嵌入的包可能很薄)。

克隆包(至少是裸克隆)将拆分 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

于 2013-01-22T15:32:30.237 回答
1

正如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
于 2020-02-13T17:38:08.897 回答