当前位置: 首页 > 面试题库 >

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

徐学潞
2023-03-14
问题内容

我知道,在Maven时代,不建议将库存储在VCS中,但是有时候这样做很有意义。

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


问题答案:

在VCS中存储.jar文件的最佳实践(SVN,Git等):请勿。

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

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

  • 二进制文件不适用于VCS。
  • 默认情况下,克隆DVCS回购将让你 所有 的历史,所有的罐子版本。这将很慢,并且会占用大量磁盘空间,而不管这些jar的压缩程度如何。
    您可以尝试浅克隆,但这是不切实际的。

使用第二个存储库(例如 Nexus )来存储这些jar,并且仅引用一个txt文件(或
Maven 项目的pom.xml文件)以获取正确的jar版本。
工件仓库更适合于[分发和发布管理目的](http://codingdict.com/questions/110315。

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

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

我正在使用一些回购协议,将其定期签入50MB tarball。
我说服他们不要压缩tarball,而git在它们之间进行增量压缩方面做得相当不错(尽管这样做需要大量的RAM)。

您在这里有更多关于Git上经过修饰的对象的信息:

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

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

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

建议:未压缩



 类似资料:
  • 问题内容: 我的角度应用程序有2个控制器。我的问题是,当用户离开页面时,控制器不会保留数据。 如何将所选控制器上的选定数据存储到数据存储中,以便可以在其他控制器之间使用? 问题答案: 选项1-自定义 您可以利用专用的角度服务在控制器之间存储和共享数据(服务是单实例对象) 服务定义 在多个控制器中的用法 选项2-HTML5 您可以使用内置的浏览器本地存储并从任何地方存储数据 写作 读 看看这个很棒的

  • 我是Spring批处理的新手,我想找到使用用例的完美方法,如下所示: 我有多个csv文件,我想把它们存储在内存(作为集合存储...即列表地图),然后我想在我的逻辑业务的下一步/作业中使用/引用它们。 让我们举一个例子,一个对象XX和一个ItemWriter一起存储在地图上。 对象XX模型 对象X的itemReader 目标作者 正如你可以看到所有的记录都存储在地图与itemWriter,我做了一个

  • 问题内容: 可能的字段类型: 我该如何决定使用哪个? 问题答案: 如果出于性能原因,该列已建立索引并且您知道自己在做什么。 否则很好。但请确保该列使用ascii字符集。(例如)

  • 我正在寻找一个简单、安全的解决方案,使用Node存储用户密码。我是一个密码学新手,但是一直在试图通过网上搜索拼凑出一个解决方案。我正在寻找一种验证,即我所提出的是一个具有基本(而不是银行、医院等)安全需求的web应用程序的可靠解决方案。这是: …以下是我做出的选择让我走到了这一步: 使用什么哈希算法? 根据这篇被广泛引用的文章,看起来领先的竞争者是PBKDF2、bCrypt和scrypt。我选择P

  • 这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们

  • 处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En