如何解包一个 git 仓库中的所有对象?

55

如何解压缩打包文件中的所有对象?

我刚刚克隆了一个远程仓库,所以我的本地仓库目前不包含任何松散的对象,只有一个.pack和.idx文件。

我尝试运行git unpack-objects < .git/objects/pack/pack-.pack,但什么也没有发生。

我做错了什么吗?还有其他命令可以解压缩吗?

3个回答

74

在使用该命令之前,您需要将打包文件移出 .git/objects/pack 目录。不过,这些打包文件需要在存储库内部。

例如,在项目根目录下创建名为 SAMPLE 的目录。然后将打包文件移动到 SAMPLE 目录中。在此之后,在没有打包文件的情况下进入存储库,使用命令:

git unpack-objects < SAMPLE/*.pack

Git会在您的仓库中的.git/objects目录中生成所有对象。


13
有些取巧,但是有效。之所以这样做可行,是因为git unpack-objects不会创建已经存在于仓库中的对象,而考虑到打包文件已在仓库中,它不会执行任何操作。这在get help unpack-objects中有很清楚的解释。 - Kevin Cox
7
谢谢,只有一件事 - 包文件不需要放在代码库里。 - Sam Watkins
1
当我尝试使用命令 git unpack-objects -n < SAMPLE/*.pack 时,Bash 给出了一个错误:bash: SAMPLE/*.pack: ambiguous redirect。这是因为我尝试使用 -n 开关吗?我想在完全解包之前尝试干运行... - Wilson F
1
@WilsonF 你有多个或没有pack文件(可能是多个)。你需要为每个.pack文件实际运行一次命令,并指定其实际文件名(虽然你可以使用tab键自动补全)。 - Paul Stelian
1
这篇文章(git unpack-objects < SAMPLE/*.pack)让我再次想了想,以为多年来我对 Bash 如何处理 < 运算符的理解是错误的。Bash 无法使用 < 运算符处理多个文件。必须一个一个地迭代它们,例如:for fn in SAMPLE/*.pack; do git unpack-objects < "$fn"; done - amphetamachine
显示剩余2条评论

0
将*.pack文件移动到.git文件夹中,然后进入.git目录并运行以下命令:
cat YOUR_PACK_FILE.pack | git unpack-objects

致命错误:delta base object 的偏移值超出范围 - 来自 PowerShell - Dan

-3
也许你可以尝试一个简单的命令: < p> git clone ***.git

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接