Version control 具有主干/分支或独立的构建文件

Version control 具有主干/分支或独立的构建文件,version-control,continuous-integration,build-process,branching-and-merging,Version Control,Continuous Integration,Build Process,Branching And Merging,我试图弄清楚的问题是,最好是将构建文件与源代码(即主干和分支)一起保存,还是将其保存在SCM下的某个单独位置 问题是:在阅读文本构建文件的其余部分时要记住,这些文本构建文件可以确保分支随时可重新构建,而不需要维护,或者确保多个分支和不同项目可以快速使用构建过程的最新错误修复/改进,而不需要与旧分支向后兼容 不管我们在构建什么,或者使用什么技术,只是为了完整性:制作移动应用程序,使用ANT构建/打包,使用SVN进行SCM Buildfile=生成器/编译器/打包器从源代码编译和打包应用程序的说明

我试图弄清楚的问题是,最好是将构建文件与源代码(即主干和分支)一起保存,还是将其保存在SCM下的某个单独位置

问题是:在阅读文本构建文件的其余部分时要记住,这些文本构建文件可以确保分支随时可重新构建,而不需要维护,或者确保多个分支和不同项目可以快速使用构建过程的最新错误修复/改进,而不需要与旧分支向后兼容

不管我们在构建什么,或者使用什么技术,只是为了完整性:制作移动应用程序,使用ANT构建/打包,使用SVN进行SCM

Buildfile=生成器/编译器/打包器从源代码编译和打包应用程序的说明

带代码的构建文件 这就是我们现在所拥有的。Ant的build.xml与SVN中的主代码一起存储。苹果的资源调配配置文件和证书也存储在那里

优点:

从开发人员的角度进行单一签出。当开发人员签出主干或其分支时,构建文件就在那里。他们不需要在别处寻找它。他们只需要在签出后构建一个简单的ant

当构建/打包过程的更改在主干上完成时,需要对不同文件位置的代码进行一些重组,支持编译器常量等,我不必担心破坏现有分支,因为每个分支都有自己的修订版

缺点:

当在主干上完成构建/打包过程的更改以改进过程并修复bug时,我现在需要担心将这些更改合并到所有活动分支,这意味着除了发布分支外,还必须跟踪所有开发/功能分支

没有可重用性。技术上相同的项目,只需要对构建文件进行一些开关/属性更改,就应该能够使用相同的构建文件。但是,由于它们除了分布在多个分支之外,还分布在多个项目位置,从上面的观点来看,进行影响所有这些位置的一般性改进是一场噩梦。这主要是因为,不管怎样,这些文件最终都会出现一些小补丁,最终会出现冲突的合并和稍微不同的过程,如果不暂停其中一个项目并修改该过程以赶上另一个项目,就无法解决这些问题

独立于代码的构建文件 为了解决前一个场景中重复使用单个文件的缺点,避免到处都有过多的小补丁,我考虑将构建文件分开。可在主干、分支和其他类似项目之间共享

优点:

可修改、改进和修复单个文件,可供多个其他项目重用。 缺点:

开发人员没有单一的签出,但可以通过svn外部或其他链接解决

破坏旧的/现有的构建。由于该文件现在只有一个版本,引入需要代码重组的改进将使其与旧的分支不兼容。当旧的分支需要修复已发布的软件时,构建文件将不再工作。是的,可以通过获得文件的先前版本来解决,但是:

目前还不清楚以前的修订版本对该部门起了什么作用 旧版本可能缺少构建过程中的其他一些关键错误修复。 提出问题 因此,对我来说,让我的生活更轻松,只维护一个文件进行错误修复和改进,从而确保项目在构建过程中使用相同的过程、最新的错误修复,等等,还是通过提供一个单点签出来让开发人员的生活更轻松,这是一个两难的选择,确保分支稳定性/可重构性,因为与分支签入的构建文件保证与该分支一起工作

有没有合适的方法?正确的方法是什么?我是不是走错路了

我建议您在每次构建代码时使用版本号标记代码。如果您想要回滚到某个修订,则始终可以从该修订的标记创建一个新分支,并使用该修订的build.xml

您还可以将所有人工制品发布到名为目录的修订版中。如果您想要回滚,您可以使用这个目录中的人工制品,而不是再次执行构建过程

构建文件应该始终是代码的一部分。这样,开发人员就可以将自己的代码签出到IDE中,并从那里开始构建供本地测试使用的代码

如果环境相关的配置因环境而异,则应将其分离到一个部署配置中,该配置在代码反编译时使用 部署

如果要跨项目重用生成文件,可以创建一个主生成文件,其中包含在开始生成之前获取的宏。如果要覆盖默认行为,只需覆盖本地项目中的宏

我考虑了给定代码基础的构建过程部分,并认为应该对代码进行版本化,但是特定的SCM允许这样做。各种构建工具rake、ant等可以帮助提取流程的细节,这意味着流程中的总体改进是由外部处理的,并且已经作为某些DSL的一部分进行管理。