在git包中提交

时间:2013-01-22 14:30:48

标签: git git-bundle

HY!

有没有办法获取存储在git包中的所有提交的列表而不首先克隆它?

获取头脑很容易,但我找不到一种方法来完整注销它。

2 个答案:

答案 0 :(得分:7)

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

克隆bundle(至少是一个裸克隆)将拆分ref并对包进行索引,生成标准git命令可以使用的格式,因此这是最简单的方法(在集成工作方面)它

在合并之前你可以做“预览”捆绑的一件事就是简单地将它添加为远程仓库,然后你可以从中获取并访问跟踪引用。如下所示:

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

现在您可以执行gitk master...bundle/master等来比较捆绑中的分支与本地仓库的比较,最后git pull bundle master将其合并。

完成后,只需使用git remote rm bundle

进行清理即可

答案 1 :(得分:1)

按照araqnidanswer的建议,从捆绑包中提取内容仍然是最简单的解决方案。

其他所有内容(意味着无需从捆绑软件中进行克隆/获取)都将涉及对git bundle格式的解码。
使用Git 2.25.1(2020年2月)更容易,因为已记录了包格式的技术细节。

请参见commit 7378ec9Masaya Suzuki (draftcode)(2020年2月7日)。
(由Junio C Hamano -- gitster --commit e99c325中合并,2020年2月12日)
See discussion

doc:描述Git捆绑包格式

签名人:铃木雅也

未记录捆绑软件格式。用ABNF描述格式,并解释每个部分的含义。

({ABNF: Augmented Backus–Naur form,基于metalanguage(BNF)的Backus–Naur form,但由其自身的语法和派生规则组成)

有关更多信息,请参见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