Version control 将内置二进制文件保存到SCM中

Version control 将内置二进制文件保存到SCM中,version-control,build,Version Control,Build,毫无疑问,将src代码保存到SCM中,但是生成的构建呢?考虑到您有许多拥有不同版本且触手可及的客户,最好将它们保存到SCM中,而不是将它们保存到文件系统中?当然,您将无法查看二进制文件的差异,但任何类型的文件都可以放在版本控制中 在SVN中,我从来没有遇到过二进制文件的问题,但如果您不小心,在其他一些SCM(Git,可能还有其他)中,它们可能会损坏 如果你使用的是VSN,另一个要考虑的是,无论你何时上传一个新版本的二进制文件,你的回购所用的空间量都会增长到二进制的大小。发生这种情况是因为区分二进

毫无疑问,将src代码保存到SCM中,但是生成的构建呢?考虑到您有许多拥有不同版本且触手可及的客户,最好将它们保存到SCM中,而不是将它们保存到文件系统中?

当然,您将无法查看二进制文件的差异,但任何类型的文件都可以放在版本控制中

在SVN中,我从来没有遇到过二进制文件的问题,但如果您不小心,在其他一些SCM(Git,可能还有其他)中,它们可能会损坏

如果你使用的是VSN,另一个要考虑的是,无论你何时上传一个新版本的二进制文件,你的回购所用的空间量都会增长到二进制的大小。发生这种情况是因为区分二进制文件没有意义,所以每个连续副本都必须完整存储。因此,如果服务器辅助存储空间是一个问题,或者二进制文件很大,您可能需要考虑另一种解决方案。


所以。。。您正在使用SVN吗?:)

不建议将生成的工件保存到SCM中

不知道您正在开发什么样的程序,对于Java项目,最佳实践是使用它来构建工件并将其存储到Maven存储库中。
有关Maven存储库以及为什么不将二进制文件放入SCM的更多信息,请阅读此文。

您不应将生成的二进制文件存储在版本控制中。它们应该是使用存储库中的构建脚本在存储库中编译和绑定源代码的输出。如果您的构建由于某种原因不可复制,请修复原因。不要滥用版本控制,将其应用于不进化的工件

请注意,这些都是关于二进制文件的。如果您有外部依赖项,有时将它们置于版本控制之下是合理的,因为它们是构建过程的输入。这可能是第三方库或工具链组件之类的东西


如果您只需要备份您提供给客户的内容,请将完整的映像或归档放在存储库所在的备份文件系统中。将它们保存在VCS文件系统顶部的额外包装层中并没有什么特别之处。如果有什么区别的话,那就不那么可靠了,因为还有一点可能是腐败。在这两种情况下,如果您关心这些已存档版本的完整性,则应该在它们发货时对它们进行加密哈希,并将其记录在存档旁边,以便以后可以对其进行验证。如果您真的有妄想症,请使用文件服务器上没有保存的私钥对校验和文件进行签名。

我没有使用Maven,也不会使用它。是的,SVN是我的SCM。我知道二进制文件的副本,这不会是一个问题,因为新版本将是一个完整的新文件在其他路径。我不会使用svn来“版本控制”我的版本。就像一个可靠的文件系统来放置构建。是的,我在SVN中保存二进制文件从来没有遇到过任何问题。这似乎不是最优雅的解决方案,但它应该可以工作。Git不会损坏二进制文件。这样的概念从何而来?这不是我找到这些信息的原始位置,但它在这里:我有一个JAR,它是我的“二进制”,mysoft-1.0.0.JAR,我将它保存在SCM/versions/mysoft-1.0.0.JAR中。明天我将编写一个新版本,而不是覆盖相同的文件(允许scm对二进制文件进行版本控制),我将编写另一个文件mysoft-1.0.1.jar。我想将SCM用作一个安全的文件系统(因为我的服务器经常被备份、维护等。在这种情况下,您可能会发现这个答案很有帮助)。