在 VCS 中存储.jar文件的最佳做法(SVN、Git 等)

2022-09-02 03:35:58

我知道,在Maven时代,不建议将库存储在VCS中,但有时这是有道理的。

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


答案 1

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

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

它在DVCS中没有,特别是像Git这样的DVCS(及其限制):

  • 二进制文件不适合 VCS
  • 默认情况下,克隆 DVCS 存储库将获得其所有历史记录以及所有 jar 版本。
    这将是缓慢的,需要大量的磁盘空间,无论这些jar被压缩得有多好。
    你可以尝试使用浅层克隆,但这非常不切实际。

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


话虽如此,如果你必须将jar存储在Git存储库中,我建议最初将它们以压缩格式存储(这是jar的默认格式:请参阅创建JAR文件
压缩和未压缩格式都将被Git视为二进制,但至少以压缩格式, 克隆和签出将花费更少的时间。

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

我正在使用一些存储库,这些存储库可以将其中的常规50MB压缩包签入其中。
我说服他们不要压缩压缩,git在它们之间进行增量压缩方面做得相当不错(尽管它需要相当多的RAM来做到这一点)。

在此处了解有关 Git 上的 deltized 对象的更多信息:

  • 如果您正在处理二进制或文本,则没有区别;
  • delta不一定与先前版本中的路径相同,因此即使添加到历史记录中的新文件也可以以剥离的形式存储;
  • 当使用存储在已限定表示中的对象时,与在压缩基础表示中使用相同对象相比,它将产生更多的成本。去除机制在考虑此成本以及空间效率的情况下进行了权衡。

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

  • Git 将压缩/计算这些文件的增量
  • 你最终会在你的工作目录中得到未压缩的jar,然后这些jar可能会被更快地加载。

建议:未压缩


答案 2

您可以使用与SO上“解压缩OpenOffice文件以更好地存储在版本控制中”问题的答案中找到的解决方案,即使用干净/污迹gitattribute使用rezip作为过滤器来存储未压缩的文件。*.jar


推荐