git对二进制文件好吗?
如果我修改了很多未压缩的文件,并且许多压缩文件从未(或几乎从未)被修改过,那么git会处理得好吗?例如,如果我插入或删除中间并在末尾附近插入数据,它会注意到它与文本一样吗?
如果git对二进制文件不好,我可以考虑使用什么工具?
答案 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 gitattribute让git 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)