在git包中提交

在git包中提交,git,git-bundle,Git,Git Bundle,嘿 有没有一种方法可以获得存储在git包中的所有提交的列表,而无需先克隆它 获取头部很容易,但我找不到一种方法来获取完整的日志。如果不编写一些专门的软件来浏览捆绑包中的包,这是不可能的。如果捆绑包是使用负引用创建的,则它可能包含仅使用捆绑包中的对象无法解析的增量(嵌入捆绑包中的包可能很薄) 克隆bundle(至少是一个裸克隆)将拆分ref并索引包,生成一种标准git命令可以使用的格式,因此这是读取它的最简单方式(就集成工作而言) 在合并捆绑包之前,您可以“预览”捆绑包,只需将其添加为远程回购,然

有没有一种方法可以获得存储在git包中的所有提交的列表,而无需先克隆它


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

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

克隆bundle(至少是一个裸克隆)将拆分ref并索引包,生成一种标准git命令可以使用的格式,因此这是读取它的最简单方式(就集成工作而言)

在合并捆绑包之前,您可以“预览”捆绑包,只需将其添加为远程回购,然后您就可以从中获取并访问跟踪引用。比如:

git remote add bundle /path/to/bundle
git remote update bundle
现在您可以执行
gitk master…bundle/master
等操作,将bundle中的分支与本地回购进行比较,最后执行
git pull bundle master
将其合并


完成后,只需使用git remote rm bundle清理即可,如中所建议的,从捆绑包中提取仍然是最简单的解决方案

其他任何事情(即不从捆绑包中克隆/获取)都将涉及解码
git捆绑包
格式。
使用Git2.25.1(2020年2月)更容易做到这一点,因为捆绑包格式的技术细节已经记录在案

参见。
(于2020年2月12日合并)

:描述Git包格式 签字人:铃木正屋

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

(,a基于(BNF),但由自己的语法和派生规则组成)

有关更多信息,请参阅:

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

在将捆绑包合并到存储库中之前,我想检查捆绑包的位置(与回购协议相比)。它的头是已经存在于回购协议中,还是相反。也许在这种情况下,将捆绑包作为遥控器添加会更容易?谢谢提示。我将深入研究它,并尝试找出必要的命令,对于类似这样的git相关实验,将其复制到一个克隆中,你可以使用rm-rf。完成后,它们很便宜
git clone-ns/path/to/mine/path/to/temp
是最便宜的临时克隆,最多几百KB,但它绝对是临时克隆,除非您了解
s
选项。不管怎样,照阿拉克尼德说的做,把包裹拿进去,你就是金色的。我不喜欢araqnid在这里提到的裸体克隆,我经常想四处游荡,打破需要结帐的东西。你知道有没有办法模拟合并(例如,在不实际调用命令的情况下说出会发生什么)。merge和pull没有--dry run选项。它们没有,也没有。您只需执行一次合并,然后通过重置到以前的位置来中止(
git reset--hard HEAD
如果存在冲突,
git reset--hard HEAD@{1}
如果自动合并成功)