git对二进制文件有用吗?
如果我有很多未压缩的文件被修改,而很多压缩文件从未(或几乎从未修改过),那么git能很好地处理吗?例如,如果我插入或移除中间部分,并在末尾附近插入数据,它会像对待文本一样注意到它吗?
如果git不适合二进制文件,我应该考虑使用哪种工具?
git对二进制文件有用吗?
如果我有很多未压缩的文件被修改,而很多压缩文件从未(或几乎从未修改过),那么git能很好地处理吗?例如,如果我插入或移除中间部分,并在末尾附近插入数据,它会像对待文本一样注意到它吗?
如果git不适合二进制文件,我应该考虑使用哪种工具?
Answers:
git开箱即用,可以轻松地将二进制文件添加到其索引中,并以有效的方式存储它们,除非您对大型不可压缩文件进行频繁更新。
问题开始于git需要生成差异和合并:git无法生成有意义的差异,或以任何有意义的方式合并二进制文件。因此,涉及对二进制文件进行更改的所有合并,变基或重整都将涉及您对该二进制文件进行手动冲突解决。
您需要确定二进制文件的更改是否足够少,以至于您可以承受它们在常规git工作流程中引起的额外手动工作,涉及合并,重新设置基数,cherrypicks。
git diff --binary
将能够修补二进制文件。
除了其他答案。
您可以使用所谓的二进制差异格式将差异发送到二进制文件。它不是人类可读的,并且只有在存储库中具有准确的原映像(即没有任何绒毛)时才能应用。
一个例子:
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。
如果您有很大的二进制文件,则可以使用git-annex将数据存储在存储库之外。检出:http : //git-annex.branchable.com/
我不知道有任何工具尝试存储二进制文件的差异以进行版本控制,但是值得注意的是,即使对于文本文件,Git也不这样做。Git将文件存储为Blob,并在需要时在它们之间进行区分。
如果您想对Photoshop / Illustrator文档之类的内容进行版本控制,则GridIron Flow可能会帮您解决问题。如果您试图使它们在机器之间保持同步,则Dropbox或Rsync可以处理它,但是它们不会进行智能区分。
git gc
垃圾收集。在同一页面上:“由于Git将每个文件的每个版本存储为单独的对象,因此效率可能非常低。想像一下,如果文件长数千行并更改一行,Git将完整地存储第二个文件,这是巨大的空间浪费。”
git gc
:“鼓励用户在每个存储库中定期运行此任务,以保持良好的磁盘空间利用率和良好的运行性能。某些git命令可能会自动运行git gc;有关详细信息,请参见下面的--auto标志。”
git对二进制文件很好。但是它不能处理像文本文件这样的二进制文件。就像您要合并二进制文件一样。我的意思是,jpeg上的差异永远不会返回任何内容。Git在文本文件上可以很好地工作,并且可能与其他使用二进制文件的解决方案一样糟糕!