gpt4 book ai didi

Git:从远程获取特定对象

转载 作者:太空狗 更新时间:2023-10-29 13:02:31 25 4
gpt4 key购买 nike

在工作中,我们必须应对非常庞大的 git 存储库 (90Go)。在尝试调整我的本地副本上的一些东西后(我的打包文件有错误,试图解压它),我可能已经删除了一些目标文件。例如:

> git gc

error: Could not read af9ed8[:snip:]

fatal: bad tree object af9ed8[:snip:]

error: failed to run repack

如何从远程存储库中获取特定对象(在这种情况下,哈希值为 af9ed8...的对象)?

最佳答案

如果您有文件系统访问远程或任何其他包含此对象的完整存储库,您应该能够去那里运行:

git cat-file tree af9ed8 > 9ed8...

请注意,这只需要对存储库的只读访问权限(您可以在其他地方写入文件),因此它应该非常安全,您甚至可以作为没有文件系统写入权限的用户来执行此操作。然后您可以将其传输/复制到您的存储库中的适当位置:

cp path/to/9ed8... .git/objects/af/9ed8...

松散对象存储在具有哈希前两位数的目录中;文件名是哈希的其余部分。

编辑:如果对象在远程端松动,您也可以直接将其复制出 .git/objects , 但如果它被打包,你必须用 git unpack-objects 解压它,而且我想该 repo 协议(protocol)中的包文件非常大。最好的方法是将包文件复制到损坏的存储库中,删除任何损坏的对象,然后使用 git unpack-objects < packfile , 它不会解压任何已经存在的对象。

我不确定如何通过普通的远程命令来完成;即使是较低级别的git fetch-pack仍然在 ref 级别运行,获取包含完成 ref 所需提交的包。我怀疑您可能会做一些偷偷摸摸的事情,比如删除所有引用该树的提交对象(git fsck 可能会帮助您找到它们)。我真的希望你可以创建一个指向那个对象的标签,将它推送到远程,然后尝试从远程获取标签(哄骗它获取对象)但看起来 Git 非常小心不要这样做让您制作或操作指向不存在对象的标签。

关于Git:从远程获取特定对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com