在VCS中存储.jar文件的最佳实践(SVN,Git,...)

Mot*_*Mot 19 java svn git

我知道,在Maven的时候,不建议在VCS中存储库,但有时它是有意义的.

我的问题是如何最好地存储它们 - 压缩或未压缩?未压缩它们更大,但如果它们被更新的替换了几次,那么两个未压缩的.jar文件之间存储的差异可能比压缩文件的差异小得多.有人做过一些测试吗?

Von*_*onC 24

在.VCS(SVN,Git,...)中存储.jar文件的最佳做法:不要.

它可以在像SVN这样的CVCS(集中式VCS)中有意义,它可以处理数百万个文件,无论其大小如何.

它不在DVCS中,尤其是像Git(及其限制)之类的:

  • 二进制文件不适合VCS.
  • 默认情况下,克隆DVCS存储库将获得所有历史记录,包括所有jar版本.
    这将是缓慢的并占用大量磁盘空间,无论这些jar的压缩程度如何.
    您可以尝试使用浅层克隆,但这非常不实用.

使用第二个存储库(如Nexus)存储这些jar,并仅引用txt文件(或Maven项目的pom.xml文件)以获取正确的jar版本. 工件仓库更适合分发和发布管理目的.


总而言之,如果你必须将jar存储在Git仓库中,我建议最初将它们以压缩格式存储(这是jar的默认格式:请参阅创建JAR文件)
压缩和未压缩格式都是被Git视为二进制文件,但至少在压缩格式下,克隆和结帐会花费更少的时间.

但是,许多线程提到以未压缩格式存储jar的可能性:

我正在使用一些repos,定期检查50MB tarball.
我说服他们不压缩tarball,并且git在它们之间进行delta压缩是相当不错的工作(尽管它需要相当多的RAM才能这样做).

在这里有更多关于Git的deltified对象:

  • 如果你正在处理二进制或文本,它没有任何区别;
  • 增量不一定与先前版本中的相同路径相同,因此即使添加到历史记录中的新文件也可以以经过筛选的形​​式存储;
  • 当使用存储在经过整理的表示中的对象时,与在压缩的基本表示中使用相同的对象相比,它将产生更多的成本.完成机制需要权衡这一成本以及空间效率.

因此,如果克隆和签出不是您每5分钟必须执行的常见操作,那么在Git中以未压缩格式存储jar会更有意义,因为:

  • Git会压缩/计算这些文件的增量
  • 您最终会在工作目录中使用未压缩的jar,然后可能会更快地加载jar.

建议:未压缩.