人类编写源代码
版本控制用于记录源代码中的更改
工具处理源代码并生成机器可读的东西(exec,libs,GUI代码等)
每隔一段时间我就想保存一份工具'输出(例如保存ARM的beta版本的可执行文件)。我可以手动保存工具'输出,为其指定一个反映修订控制历史记录中的点的名称(例如,使用标记名称)。这看起来很尴尬,容易出错。
我想深入了解两件事:
使用修订控制在修订历史记录图表中的特定位置存储工具生成的输出的优缺点是什么?您使用哪些非RCS工具作为替代方案?
在mercurial,git中,在特定修订中包含工具生成的输出的最佳方法是什么?
答案 0 :(得分:8)
我认为二进制文件不应与其源代码一起存储在版本控制中。
缺点:
svn update
将更新二进制文件的时间戳,使您的构建工具混乱,错误地认为二进制文件比源代码更改更新。一般来说,我认为你应该避免提交任何以确定的方式从其他版本化资源自动生成的内容。没有冗余 - >没有机会出现不一致的情况。
相反,使用持续集成服务器在每次提交时自动重建(并运行测试)。如果需要,让这个构建服务器在某个地方(SVN外部)发布二进制文件,就像网络上的共享文件夹一样。
答案 1 :(得分:4)
我建议不要将二进制文件与DVCS混合(例如git和Mercurial)。主要原因是:任何不可合并的文件都是DVCS的问题。 DVCS从根本上依赖于高质量的文件合并,以实现DVCS的概念(见this discussion on binary files in git)。
我同意二进制文件值得存储。但它们应该存储在与源版本控制系统不同的位置。也许是具有受控写访问权的服务器。如果要保留所有历史记录,可能是单独的集中式VCS存储库,例如Subversion。
为了避免这种分离像你说的那样“笨拙且容易出错”,尽量让它自动化。创建一个自动构建过程,确保源版本化/标记,完成构建,并将输出(正确命名,版本化,标记等)放入指定的存储区。