Git 能处理二进制文件吗?

Git 能处理二进制文件吗?

如果我有很多未压缩的文件被修改,很多压缩文件从来没有(或几乎从来没有)修改,git 会处理好吗?例如,如果我插入或删除中间和插入数据靠近结束,它会注意到它,因为它与文本?

如果 git 不能很好地处理二进制文件,我可以考虑使用什么工具?

106696 次浏览

Git 很擅长处理二进制文件。但它不能像处理文本文件那样处理二进制文件。就好像你想要合并二进制文件。我的意思是,一个差异的 JPEG 永远不会返回你任何东西。Git 可以很好地处理文本文件,可能和其他任何使用二进制文件的解决方案一样糟糕!

Out of the box, git can easily add binary files to its index, and also store them in an efficient way unless you do frequent updates on large uncompressable files.

当 git 需要生成差异和合并时,问题就开始了: git 不能生成有意义的差异,或者以任何有意义的方式合并二进制文件。因此,所有涉及到二进制文件更改的合并、重建或处理单元都将涉及到对该二进制文件进行手动冲突解决。

您需要确定二进制文件的更改是否足够少,以至于您可以忍受它们在普通的 git 工作流中导致的额外手工操作,包括合并、重建、处理程序。

除了其他的答案。

  • 您可以使用所谓的 二进制差分格式将 diff 发送到二进制文件。它不是人类可读的,而且只有在存储库中有 一模一样预映像(即没有任何模糊)的情况下才能应用它。< br > 一个例子:

    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
    
  • You can use textconv gitattribute to have git diff show human-readable diff for binary files, or parts of binary files. For example for *.jpg files it can be difference in EXIF information, for PDF files it can be difference between their text representation (pdf2text or something like that).

HTH.

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

如果你想要一个版本控制的解决方案,你可能需要考虑 Git-lfs,它有一个指向你文件的轻量级指针。

这意味着当你克隆你的回购,它不会下载所有的版本,但只有一个是签出。

这里有一个不错的 tutorial教你如何使用它