在SVN中存储二进制文件是否可以接受/良好?
我们希望共享运行时项目二进制文件。所以每个团队成员都可以使用当前的工作版本。在SVN中存储二进制文件是否可以接受/良好?,svn,version-control,binary,Svn,Version Control,Binary,我们希望共享运行时项目二进制文件。所以每个团队成员都可以使用当前的工作版本。 在SVN中存储运行时二进制文件是可以接受的/好的?在SVN repo中存储二进制文件是完全可以接受的。作为旁注,我不明白为什么会有人想在存储库中存储构建工件(我不是说你这么做)。在这个问题上有一些争论,但我说是的。我想说,如果这能让你的团队的生活更轻松,那就这么做吧。如果这样可以减少设置工作开发环境所需的时间,那就去做吧。不是为了这个目的,不是。你应该使用外部文件存储,比如FTP或Web服务器。通过这种方式,您可以轻松
在SVN中存储运行时二进制文件是可以接受的/好的?在SVN repo中存储二进制文件是完全可以接受的。作为旁注,我不明白为什么会有人想在存储库中存储构建工件(我不是说你这么做)。在这个问题上有一些争论,但我说是的。我想说,如果这能让你的团队的生活更轻松,那就这么做吧。如果这样可以减少设置工作开发环境所需的时间,那就去做吧。不是为了这个目的,不是。你应该使用外部文件存储,比如FTP或Web服务器。通过这种方式,您可以轻松下载运行时二进制文件的特定版本,而无需首先在SVN中更新该版本。您希望在版本控制系统中存储二进制文件的两个常见原因是(编写于2009年):
- 存储外部第三方库
通常会将它们存储到Maven存储库中,但将它们存储到SVN中允许您拥有一个且只有一个引用,以满足您的所有需要:获取您的源代码,并获取您编译这些源代码所需的库。所有这些都来自一个存储库
- 存储配送以加快部署
通常交付(您构建以部署到生产中的可执行文件)是按需构建的。
但是,如果您有许多预生产环境,并且交付了许多产品,那么为组装、集成、认证和预生产平台构建它们的成本可能会很高。
解决方案是一次性构建它们,将它们存储在SVN的交付部分,然后直接在不同的环境中使用它们。
注:
这也适用于开发元素:如果您有一个生成900个POJO文件(通过XML绑定)的流程,并且您需要在多个环境中下载该开发集,那么您可能需要一个压缩文件副本事务,而不是900个
也就是说:
- 正确地(不良做法、速度慢、源和存储传递之间不匹配)
- 拥护(Nexus,或者如Vladimir所述,)
- (在他的案例中是Nexus)
但是我们从不允许存储Eclipse的.classpath和.project文件(与工作区相关的设置)。我会让我的构建和持续集成系统处理最新的工作版本,方法是自动将它们复制到FTP、web或文件共享中,以便于访问
更好的是,我会投资一个自动处理构建工件的CI系统,我自己也喜欢jetbrains,但还有其他的。通过这种方式,您可以完全自动地处理它。在版本控制下存储二进制文件可能会破坏版本控制的目的。您最好使用HTTP/FTP。关于SO at的讨论可能会有用 我们的Java.jar文件构建是在其.jar文件依赖项中绑定的,我们正在将其签入svn。这在实践中是多余的,但我们希望确保我们生产的每一个Java应用程序构建都有经过QA的库 然而,这种方法真正让我恼火的是,当我开始远程连接到存储库并进行同步时。只需翻阅所有二进制库就要花很长时间 我们已经放弃了这种做法,现在使用Maven来管理库依赖关系——即使对于我们仍在使用ant构建的项目也是如此。没有更多的二进制文件被签入svn。由于战略的转变,生活在多个方面变得更好。而且,我们可以严格控制所需的库依赖项的版本
对于我们的.NET版本,我的一位开发人员设计了一个解决方案,在很大程度上类似于Maven,在所有依赖关系管理方面都能发挥作用,并且在那里也获得了几乎相同的好处。至少我将二进制文件存储在SVN中,通过这种方式,我可以快速恢复到特定的二进制版本,查看bug是否发生在其中,并跟踪引入bug的版本,而不是检查整个项目,设置所有特定的项目相关和环境设置,然后编译它。如果您使用Java开发,然后您可以设置一个,然后使用类似或+的工具访问它 您可以将本地构建工件的更新上载回本地存储库,因为它们已准备好供公司中的其他人使用 对于其他开发环境,我不知道有哪些类似于上述的工具可用——我倾向于将它们放在SVN中,然后使用它 我通常使用一个单独的存储库来存储第三方库,以将它们排除在常规开发存储库之外,并让我的构建文件将它们加载到相对于项目基本文件夹的预期位置 实际上,我使用两个存储库。一个用于构建项目所需的最小文件(例如,jar、lib文件),另一个用于整个第三方包(包括源代码、文档或其他),我通常存储tar.bz2 那样的话,如果你只想得到你所需要的最少的东西,你就抓住它