将构建的二进制文件保存到SCM中

时间:2011-08-05 15:20:27

标签: version-control build

毫无疑问将src代码保存到SCM中,但生成的构建怎么样?将它们放入文件系统,将它们保存到SCM中是一个很好的做法,考虑到你有很多客户使用差异版本并且可以使用吗?

3 个答案:

答案 0 :(得分:2)

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

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

如果您只需要备份已发送给客户的内容,请将完整的映像或存档拖放到保存存储库的同一备份文件系统中。将它们保存在文件系统顶部的VCS额外包装层没有什么特别之处。如果有的话,那就不那么可靠,因为还有一点可能是腐败。在任何一种情况下,如果您关心那些存档构建的完整性,您应该在它们发布时对它们进行加密哈希,并将它们记录在存档旁边,以便您以后可以验证它们。如果您真的是偏执狂,请使用未保存在该文件服务器上的私钥对校验和文件进行签名。

答案 1 :(得分:1)

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

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

如果您正在使用SVN,另外需要考虑的是,无论何时上传新版本的二进制文件,您的repo使用的空间量都会增加二进制文件的大小。发生这种情况是因为它对diff二进制文件没有意义,所以每个连续的副本都必须整个存储。因此,如果服务器辅助存储空间存在问题,或者您的二进制文件很大,您可能需要考虑替代解决方案。

所以......你在使用SVN吗? :)

答案 2 :(得分:0)

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

不知道你正在开发什么样的程序,对于Java项目,好的做法是使用Maven来构建和存储工件到Maven存储库。 有关Maven资源库的更多信息以及为什么不将二进制文件放入SCM,请阅读此article