当项目树有二进制文件时,GIT、Mercurial、SVN或其他版本控制工具能否正常工作?

当项目树有二进制文件时,GIT、Mercurial、SVN或其他版本控制工具能否正常工作?,svn,git,mercurial,dvcs,binaryfiles,Svn,Git,Mercurial,Dvcs,Binaryfiles,有时我们的项目树可以有二进制文件,如jpg、png、doc、xls或pdf。GIT、Mercurial、SVN或其他工具在只更改了二进制文件的一部分时能做得很好吗 例如,如果规范是用.doc编写的,并且它是存储库的一部分,那么如果它是4MB,编辑了100次,但只编辑了1或2行,并且在一年中签入了100次,那么它就是400MB 如果它是100个不同的.doc和.xls文件,那么它是40GB。。。不是一个容易管理的尺寸 我试过GIT和Mercurial,发现它们似乎都添加了大量数据,即使在.doc或

有时我们的项目树可以有二进制文件,如jpg、png、doc、xls或pdf。GIT、Mercurial、SVN或其他工具在只更改了二进制文件的一部分时能做得很好吗

例如,如果规范是用.doc编写的,并且它是存储库的一部分,那么如果它是4MB,编辑了100次,但只编辑了1或2行,并且在一年中签入了100次,那么它就是400MB

如果它是100个不同的.doc和.xls文件,那么它是40GB。。。不是一个容易管理的尺寸

我试过GIT和Mercurial,发现它们似乎都添加了大量数据,即使在.doc或.pdf中更改了一行。GIT、Mercurial或SVN内部是否有其他方法可以完成这项工作

另外,我试过Dropbox,我可以得到一个7MB的文件,然后我突出显示了.PDF文件中的几个地方,Dropbox似乎可以在1秒内上传更改。我的上传速度只有200kb/s,所以我认为Dropbox在区分我的文件方面做得相当好。因此,我们可以使用Dropbox,但这种方式没有版本控制。

请参阅。您的主要问题是,即使是doc和其他文件中的微小更改,也会触发文件结构中的重大更改(部分原因是它是压缩的)


因此,我不相信您会找到任何好的方法在版本控制系统中处理这些文件。

存在二进制差异工具,但是它们没有多大帮助,因为由于压缩,图像的一个像素或Word文档中一个字符的更改与文件中一个字节的更改不一致。因此,这种二进制数据的“良好”处理是不可能的

如果您想提交这样的文档,请考虑提交未压缩的变体-RTF,而不是DOC、TEX,而不是PDF等。如果版本控制系统使用压缩来压缩其内部存储库,那么该方法应该工作得很好。比如说,

新添加的对象使用zlib压缩整体存储


编辑:我只想指出,即使是RTF也很可怕,但没有DOC那么可怕。如果你的文档可以切换到TXT或TeX,那就最好了。

我一直在使用git在Mac、Linux和Windows机器之间同步我的文档。我不得不做一次重新设计,以避开Windows上2Gb的文件限制。在3个定期同步的存储库中,总容量约为7Gb。在某个时候,我甚至在互联网某处的托管服务器上有一个远程副本

现在,我几乎不需要复制这些回购协议,这样大的规模就不会有太多阻碍。我还看到.git没有显著增加,它仍然保持在签出文档、PDF和excel表大小的40-60%左右

更改文档或pdf文件中的一行,会随着格式效果的波动而在文件中发生很大的变化。类似地,更改XLS文件中的单元格可以更改许多其他单元格


但是,与不进行版本控制的文档相比,我很高兴能够以低于标准的压缩比生活

一般来说,版本控制系统在文本文件中工作得更好。整个合并/冲突概念实际上是基于源代码的。然而,SVN对于二进制文件非常有效。(我们使用它来编辑CAD图纸。)

我要指出的是,当有多个人在处理一个普通的二进制文件时,文件锁定(svn:needs lock)几乎是必须的。如果没有文件锁定,两个人可以同时处理一个二进制文件。有人先提交他们的更改。猜猜没有犯罪的人会怎么样。他们所做的所有二进制/无法组织的工作实际上都丢失了。文件锁定可序列化文件上的工作。您确实失去了版本控制系统的“并发”访问功能,但您仍然拥有提交日志、回滚到以前版本等优点

TortoieSVN客户端足够智能,可以使用MS Word内置的合并工具来区分doc/docx文件。它还具有配置选项,允许您根据文件扩展名指定备用的diff工具,这非常酷。(遗憾的是,没有人为我们的CAD软件包制作一个不同的工具)


不过,像Git或Hg这样的当前一代DVC往往会使用二进制文件。它们没有任何类型的文件锁定机制。

IMHO,您应该停止使用SCM来管理这样的文档。您应该使用像Alfresco这样的专用工具(我相信还有很多其他的文档管理工具)。

这是一个正确的观点:最好配置Word、Excel和Openoffice,以便在默认情况下以“臃肿的”基于xml的格式保存,因为SCM更有可能检测到差异。@Peter Tillemans:可能,至少使用
git
,在提交XML数据之前设置一个钩子来运行
tidy
;这可能会增加减少差异的机会。尽管可能需要安装
cygwin
,以便在windows下获得
tidy
。这还假设MS格式足够一致,可以在
tidy
ed之后读取。Postscript是TeX的另一种替代方法。正如另一个答案中所述,Word还可以将文件保存为XML格式,这可能会导致差异。