【发布时间】:2013-06-03 01:09:26
【问题描述】:
如何解压缩包文件的所有对象?
我刚刚克隆了一个远程仓库,所以我的本地仓库目前不包含任何松散的对象,只有一个 .pack 和一个 .idx 文件。
我尝试运行git unpack-objects < .git/objects/pack/pack-.pack,但没有任何反应。
我做错了什么?有没有其他命令可以做到这一点?
【问题讨论】:
如何解压缩包文件的所有对象?
我刚刚克隆了一个远程仓库,所以我的本地仓库目前不包含任何松散的对象,只有一个 .pack 和一个 .idx 文件。
我尝试运行git unpack-objects < .git/objects/pack/pack-.pack,但没有任何反应。
我做错了什么?有没有其他命令可以做到这一点?
【问题讨论】:
在使用该命令之前,您需要将包对象移出.git/objects/pack 目录。但是,包文件需要在存储库中。
例如,在项目的根目录中创建一个目录名称SAMPLE。然后,将包文件移动到SAMPLE 目录。之后,在没有包文件的存储库中,使用命令
git unpack-objects < SAMPLE/*.pack
Git 将在您的存储库的.git/objects 目录中生成所有对象。
【讨论】:
git unpack-objects 不会在 repo 中创建对象,并且看到包文件在 repo 中它什么都不做。这在get help unpack-objects 中有非常清楚的解释。
.git/objects/info/packs 似乎列出了.git/objects/packs 下可用的包文件。还有文件.git/packed-refs,其中包含可通过包文件获得的参考(头、标签)列表。我不确定删除包文件后如何处理它们——可能需要删除它们,可能是git fsck 会处理它们——我不知道。只是为了以防万一...
for file in $(ls SAMPLE/); do git unpack-objects < SAMPLE/$file; done 这样的简单命令来实现您的解决方案。