2010-11-21 82 views
8

人类写源代码呼吁见解:版本控制和二进制

版本控制是用来记录在源代码更改

工具过程的源代码,并生成机器可读的东西(EXEC ,库,GUI代码等)

每隔一段时间我想保存一份工具'输出(例如保存用于ARM的beta版本的可执行文件)。我可以手动保存工具'输出,给它一个反映修订控制历史中的点的名称(例如使用标签名称)。这看起来很尴尬和容易出错。

我想你洞察到两两件事:

  1. 什么是在修订历史图表特定位置使用版本控制存储工具生成的输出的优点/缺点?你用什么非RCS工具作为替代方案?

  2. 在善变,混帐

    ,什么是包括特定版本工具生成的输出,而不是别人

+1

请参阅http://stackoverflow.com/questions/3927571/for-binary-files-should-i-use-bfiles-or-bigfiles/3928194#3928194或http://stackoverflow.com/questions/3990449/我想分开二进制文件媒体从我的代码库是它值得它/ 3994369#3994369初学者。 – VonC 2010-11-21 11:52:25

回答

8

我相信二进制文件不应该在版本控制自己的源代码一起存储的最佳途径。

缺点:在大项目

  • 鼓励不好的构建实践。最佳实践是完全自动化完整构建(不仅仅是源代码编译,还包括运行自动化测试,文档打包,设置等等)。提交二进制文件使您能够忽略:“只需手动为已更改的部分进行构建”。
  • 更新较慢,并承诺
  • 需要每次做一个构建
  • 提交其改变源代码后更新,但不是相应的二进制文件将引起开发商之间的混乱的时间来处理二进制文件有冲突。你如何检测出不匹配?
  • svn update将更新您的二进制文件的时间戳,混淆您的构建工具,这会错误地认为二进制文件比源代码更新更新。
  • 它在存储库中使用更多的磁盘空间。 (这可能可以忽略不计,具体取决于您的项目)。

通常,我认为您应该避免提交任何以确定性方式从其他版本化资源自动生成的任何内容。没有冗余 - >没有不一致的机会。

相反,使用持续集成服务器在每次提交时自动重建(并运行测试)。如果需要,让构建服务器在某处(SVN外部)发布二进制文件,就像网络上的共享文件夹一样。

+0

+1为“夜间建立设置+存档”计划 – 2010-11-24 12:06:54

4

我建议不要将二进制文件与DVCS混合在一起(例如git和Mercurial)。主要原因是:任何不可合并的文件都是DVCS的问题。DVCS从根本上依靠文件的高质量合并来实现DVCS的工作原理(请参阅this discussion on binary files in git)。

我同意二进制文件值得存储。但他们应该可以存储在与源代码版本控制系统不同的地方。也许是一个受控写入访问的服务器。如果你想保留所有的历史记录,也许分开集中式VCS存储库,如Subversion。

为了避免这样的分离,如您所说的那样“尴尬且容易出错”,请尽量使其自动化。制作一个自动构建过程,确保源代码版本/标记,完成构建,并将输出(正确命名,版本化,标记等)放入指定商店。