是否有任何版本控制系统(如SVN,Git或Mercurial)允许您“保留最新版本”而不是修订版? (例如二进制文件)

时间:2010-06-14 13:42:06

标签: svn git mercurial dvcs

在我们的项目文件中,如果有二进制文件,例如.doc,.xls,.jpg,我们选择不保留过去的版本(只保留最新版本没问题),有没有办法告诉SVN,Git或Mercurial或其他一些工具可以跳过对这些文件或特定文件夹的修订?

说,有一个4MB的.doc文件,我需要检查数百次,但我真的不太关心它过去的版本。因此,如果系统保留了100个修订版,那已经是400MB ...检查300次意味着1个文件的1.2GB,这并不好。只有最新版本是好的,所以每个人都可以同步它。此外,我不希望其他人检查项目,并且必须检查20GB的东西。 (Git和Mercurial会在每个人的本地存储库中保留所有修订版吗?)

10 个答案:

答案 0 :(得分:17)

请注意,这不是一个完全答案。

如果我放弃围绕不为后代保留文件正确版本的讨论,我至少会对您问题的一部分发表评论,这可能会让您重新考虑不将该文件的所有修订保留在存储库中。 / p>

版本控制系统通常不会在每个新版本上存储整个文件,而是存储更改。根据系统的不同,您可能偶尔会获得该文件的完整副本,但大多数更改集仅为更改。

例如,在Mercurial中,我试过这个:首先我从这个网址下载了C#3.0语言规范作为word文件:http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc

然后我将其提交给一个新的Mercurial存储库。提交前的大小(空存储库)为80字节,磁盘上的文件大小为2.387.968字节,提交后的存储库为2.973.696字节。请注意,该文件现在可以有效地存储两次,一次在我的工作副本中(我可以编辑的那个),一次在我的存储库中,作为我初始提交的一部分。

然后我打开了该文件,并使用3.0(不带引号)更改了4.0的所有出现次数,并将所有C#的出现更改为VB并保存。然后我用单字母评论提交了新版本。提交后存储库的大小现在为3.497.984字节。差异是512KB(存储库中涉及一些分块,因此大小是精确的512KB值。)

如果我现在再次打开文件,只将标题页VB更改回C#,保存并再次提交,存储库的大小增加276KB,最多为3.780.608字节。

正如您所看到的,更改不提交文件的整个副本,但是授予,差异也不在“10KB”范围内。

让我们假设每个差异的平均大小(仅此文件)将介于两者之间,即两个值之间的平均值为50%。这意味着对此文件的300次提交更改,平均394KB总计115MB。 这不是很多

我的建议如下:

  • 停止成为小偷,磁盘空间便宜,相比之下,当有人说“我真的希望我在上周损坏它之前就知道该文件是什么样的”时,您会感到头疼。

答案 1 :(得分:4)

快速检查硬盘价格会使1TB内部驱动器的价格大约在75美元左右。使用数学,即4MB文件的250,000份,或每份0.0003美元。程序员一小时的典型开销大约是100美元。

还需要付出更多代价:保留该文件的所有版本,或者如果您再次需要该副本,请让程序员重新创建旧版本?

答案 2 :(得分:3)

这不是VCS的工作,但对于文件系统来说,就像肯说的那样。

但是,如果您真的需要这样的“功能”,可以使用 hooks 机制,从历史记录中删除以前的文件(比如说,提交时间超过3次)。

答案 3 :(得分:3)

我确实知道有人这样做,但你不会喜欢这个答案。

其Visual Sourcesafe。检查文件上的“仅存储最新版本”标志,它将停止保存历史记录。

如果您希望此功能具有合适的SCM,我建议不要将该文件放在SCM中,而是将其存储在其他地方,如文档管理解决方案,甚至只是文件系统共享。

答案 4 :(得分:2)

根据您的特定需求,您可以随时删除过去的版本,VCS(Version Control System从不失去版本)不适合。

存储库管理器(这是一种比文件系统上的简单共享路径更高级的解决方案)是您正在寻找的。
(例如Nexus Sonatype,仅提一个)

答案 5 :(得分:2)

Perforce可以为您做到。

Check file types:

+ S 仅存储头部修订版 提交新版本后,旧版本将从版本库中清除。对可执行文件或.obj文件很有用。

-OR -

+ Sn的 仅存储最新的n个版本,其中n是1到10或16,32,64,128,256或512的数字。 在提交超过n个新修订版本时,或者如果您将现有的+ Sn文件的n更改为小于其当前值的数字,则从版本库中清除较旧的修订版本。有关详细信息,请参阅命令参考。

答案 6 :(得分:1)

版本控制系统的主要职责是保留更改历史记录,因此我认为这不可行。为什么在只需要最新版本时使用版本控制?

答案 7 :(得分:1)

通常,不:VCS旨在保留整个历史记录。然而,在太空战线上并没有丢失所有东西;您命名的所有系统都将为每个修订版存储二进制差异,而不是整个文件的完整副本。这意味着所需的空间通常会少得多。

答案 8 :(得分:1)

为什么不将SVN用于二进制文件而将DVCSS用于所有源文件?这样,您可以保留服务器端的所有修订版本,但只保留一个副本客户端。对于其他来源,您可以获得拥有真正VCS的好处。

据我所知,我们希望将二进制文件的所有修订保留在某个地方,但不会为每个开发人员在他们拥有的每个克隆上所做的每次“拉动”付出代价。这可能是滥用......

答案 9 :(得分:0)

如果您只想在计算机之间同步文件,请使用Dropbox

如果你正在使用版本控制,那么看看Lasse V. Karlsen所写的内容,磁盘空间便宜。