繁体   English   中英

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

[英]git checkout binary file using object SHA (not commit SHA)

我将从 git repo 中删除视频文件(使用 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

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

git cat-file blog 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 本身实际使用什么命令?

这是破坏您的数据的PowerShell。 我建议不要住在服务员打开并重新打包所有行李的酒店,这会损坏不符合他们期望的所有东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM