在 VCS 中存储.jar文件的最佳做法(SVN、Git 等)
我知道,在Maven时代,不建议将库存储在VCS中,但有时这是有道理的。
我的问题是如何最好地存储它们 - 压缩或未压缩?未压缩的它们更大,但是如果用较新的文件替换几次,那么两个未压缩.jar文件之间的存储差异可能比压缩文件之间的差异小得多。有人做了一些测试吗?
我知道,在Maven时代,不建议将库存储在VCS中,但有时这是有道理的。
我的问题是如何最好地存储它们 - 压缩或未压缩?未压缩的它们更大,但是如果用较新的文件替换几次,那么两个未压缩.jar文件之间的存储差异可能比压缩文件之间的差异小得多。有人做了一些测试吗?
在 VCS(SVN、Git 等)中存储.jar文件的最佳做法:不要。
在像SVN这样的CVCS(集中式VCS)中,它可以处理数百万个文件,无论它们的大小如何。
它在DVCS中没有,特别是像Git这样的DVCS(及其限制):
使用第二个存储库(如Nexus)来存储这些jar,并且仅引用文件(或Maven项目的文件)以获取正确的jar版本。
项目存储库更适合分发和发布管理目的。txt
pom.xml
话虽如此,如果你必须将jar存储在Git存储库中,我建议最初将它们以压缩格式存储(这是jar的默认格式:请参阅创建JAR文件)
压缩和未压缩格式都将被Git视为二进制,但至少以压缩格式, 克隆和签出将花费更少的时间。
但是,许多线程都提到了以未压缩格式存储jar的可能性:
我正在使用一些存储库,这些存储库可以将其中的常规50MB压缩包签入其中。
我说服他们不要压缩压缩,git在它们之间进行增量压缩方面做得相当不错(尽管它需要相当多的RAM来做到这一点)。
您在此处了解有关 Git 上的 deltized 对象的更多信息:
- 如果您正在处理二进制或文本,则没有区别;
- delta不一定与先前版本中的路径相同,因此即使添加到历史记录中的新文件也可以以剥离的形式存储;
- 当使用存储在已限定表示中的对象时,与在压缩基础表示中使用相同对象相比,它将产生更多的成本。去除机制在考虑此成本以及空间效率的情况下进行了权衡。
因此,如果克隆和签出不是您必须每5分钟执行一次的常见操作,则在Git中以未压缩的格式存储jar将更有意义,因为:
建议:未压缩。
您可以使用与SO上“解压缩OpenOffice文件以更好地存储在版本控制中”问题的答案中找到的解决方案,即使用干净/污迹gitattribute使用rezip作为过滤器来存储未压缩的文件。*.jar