git对二进制文件好吗?

时间:2011-01-15 00:08:01

标签: git

git对二进制文件好吗?

如果我修改了很多未压缩的文件,并且许多压缩文件从未(或几乎从未)被修改过,那么git会处理得好吗?例如,如果我插入或删除中间并在末尾附近插入数据,它会注意到它与文本一样吗?

如果git对二进制文件不好,我可以考虑使用什么工具?

6 个答案:

答案 0 :(得分:39)

除了其他答案。

  • 您可以使用所谓的二进制差异格式将差异发送到二进制文件。它不是人类可读的,只有在您的存储库中有完全原像时才能应用它,即没有任何模糊。
    例如:

    diff --git a/gitweb/git-favicon.png b/gitweb/git-favicon.png
    index de637c0608090162a6ce6b51d5f9bfe512cf8bcf..aae35a70e70351fe6dcb3e905e2e388cf0cb0ac3 100
    GIT binary patch
    delta 85
    zcmZ3&SUf?+pEJNG#Pt9J149GD|NsBH{?u>)*{Yr{jv*Y^lOtGJcy4sCvGS>LGzvuT
    nGSco!%*slUXkjQ0+{(x>@rZKt$^5c~Kn)C@u6{1-oD!M<s|Fj6
    
    delta 135
    zcmXS3!Z<;to+rR3#Pt9J149GDe=s<ftM(tr<t*@sEM{Qf76xHPhFNnYfP!|OE{-7;
    zjI0MY3OYE5upapO?DR{I1pyyR7cx(jY7y^{FfMCvb5IaiQM`NJfeQjFwttKJyJNq@
    hveI=@x=fAo=hV3$-MIWu9%vGSr>mdKI;RB2CICA_GnfDX
    
  • 您可以使用 textconv gitattributegit diff显示二进制文件或部分二进制文件的人类可读差异。例如,对于* .jpg文件,它可能与EXIF信息不同,对于PDF文件,它们的文本表示(pdf2text或类似内容)之间可能存在差异。

HTH。

答案 1 :(得分:37)

开箱即用,git可以轻松地将二进制文件添加到其索引中,并以高效的方式存储它们,除非您对大型不可压缩文件进行频繁更新。

当git需要生成差异和合并时,问题就开始了:git无法生成有意义的差异,或者以任何有意义的方式合并二进制文件。因此,涉及更改二进制文件的所有合并,rebase或cherrypicks都将涉及您对该二进制文件进行手动冲突解决。

您需要确定二进制文件是否变得非常罕见,以至于您可以使用它们在涉及合并,rebase,cherrypicks的正常git工作流中引起的额外手动工作。

答案 2 :(得分:12)

如果您有非常大的二进制文件,可以使用git-annex将数据存储在存储库之外。查看:http://git-annex.branchable.com/

答案 3 :(得分:5)

我不知道有任何工具试图存储用于版本控制的二进制文件的差异,但值得注意的是Git甚至不会对文本文件执行此操作。 Git将文件存储为blob,并在需要时在它们之间进行区分。

如果您希望对Photoshop / Illustrator文档等版本进行版本控制,GridIron Flow可能会为您提供帮助。如果你试图让它们在机器之间保持同步,Dropbox或Rsync可以处理它,但它们不会进行智能差异化。

答案 4 :(得分:2)

git很适合使用二进制文件。但它不会处理像文本文件这样的二进制文件。这就像你想要合并二进制文件。我的意思是,jpeg上的差异永远不会让你回头。 Git与文本文件一起工作得非常好,可能与其他所有二进制文件解决方案一样糟糕!

答案 5 :(得分:0)

如果您想要一个版本控制解决方案,则可以考虑使用git-lfs,它具有轻量级的文件指针。

这意味着克隆克隆存储库时,它不会下载所有版本,而只会下载已签出的版本。

这是一个很好的tutorial使用方法