在我们的项目文件中,如果有二进制文件,例如.doc,.xls,.jpg,我们选择不保留过去的版本(只保留最新版本没问题),有没有办法告诉SVN,Git或Mercurial或其他一些工具可以跳过对这些文件或特定文件夹的修订?
说,有一个4MB的.doc文件,我需要检查数百次,但我真的不太关心它过去的版本。因此,如果系统保留了100个修订版,那已经是400MB ...检查300次意味着1个文件的1.2GB,这并不好。只有最新版本是好的,所以每个人都可以同步它。此外,我不希望其他人检查项目,并且必须检查20GB的东西。 (Git和Mercurial会在每个人的本地存储库中保留所有修订版吗?)
答案 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可以为您做到。
+ 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所写的内容,磁盘空间便宜。