git checkout二进制文件使用对象SHA(不是提交SHA)

xzv2uavs  于 2023-06-20  发布在  Git
关注(0)|答案(1)|浏览(89)

我将从git仓库中删除视频文件(使用BFG)。在删除它们之前,我想提取它们并备份它们。我有一个这些对象及其对象SHA的列表。

ce6c93a3389b    4.4MiB      Fixasr/part01/ToFix.mp4                     
3cf7cff4e087    5.7MiB      Fixasr/part03/ToFix.flac            
028fd658bcc5    6.0MiB      Selectmen (3 minutes).webm          
ea3fa8f8dc9a    6.0MiB      Fixasr/part01/ToFix.flac
... etc  ...

我可以使用"git cat-file"轻松地提取一个文本文件,并返回相同的文本文件:

git cat-file -p e13b31 >textfile.txt

但是如果我用二进制文件尝试这样做,输出是无效的。如果我的二进制文件是9MB,那么输出文件大约是它的两倍,18MB!我也尝试使用:

git cat-file blob 53f6e >video.mp4

但我得到了同样的结果。
我尝试了一个小的二进制文件,看看发生了什么。我的文件包含:

00 00 01 00 02 00 03 00 04 ...

当我使用"git cat-file"解压缩这个文件时,它包含以下内容:

FF FE 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 ...

它似乎试图通过将每个“2字节字符”转换为4字节来将二进制文件转换为Unicode文本!
最有可能的是,git在检出二进制文件时,本身并不使用"cat-file"这个管道命令。有谁知道git本身实际上使用的是什么命令吗?

r6hnlfcb

r6hnlfcb1#

这是powershell破坏你的数据。我建议不要住那些服务员开门的酒店,他们会重新打包你所有的行李,破坏所有不符合他们期望的东西。

相关问题