Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 最佳实践,针对主干构建主干?_Version Control_Testing_Build Process - Fatal编程技术网

Version control 最佳实践,针对主干构建主干?

Version control 最佳实践,针对主干构建主干?,version-control,testing,build-process,Version Control,Testing,Build Process,我们有许多项目使用共享组件(DLL)的公共基础。 目前,每个项目的开发构建都与从组件主干构建的DLL相链接。(即主干构建使用来自其他主干构建的DLL) 当我们进行发布构建时,我们有一个脚本,它遍历项目文件,并将主干引用替换为组件的特定编号版本(从标记的分支构建) 我认为这削弱了我们在开发过程中所做的测试,因为我实际从事的项目使用的DLL与发布版本将使用的DLL不同。我希望始终根据组件的编号版本进行开发,并且只有在有特定需要时才对其进行更新 然而,团队中的其他人认为,除非我们针对trunk进行开发

我们有许多项目使用共享组件(DLL)的公共基础。 目前,每个项目的开发构建都与从组件主干构建的DLL相链接。(即主干构建使用来自其他主干构建的DLL)

当我们进行发布构建时,我们有一个脚本,它遍历项目文件,并将主干引用替换为组件的特定编号版本(从标记的分支构建)

我认为这削弱了我们在开发过程中所做的测试,因为我实际从事的项目使用的DLL与发布版本将使用的DLL不同。我希望始终根据组件的编号版本进行开发,并且只有在有特定需要时才对其进行更新

然而,团队中的其他人认为,除非我们针对trunk进行开发(并在每次发布时更新到较新版本的组件),否则我们将面临以下问题:(a)我们的产品几乎不会更新到较新版本的组件(b)当我们确实需要更新时,这将是一项艰巨的任务,因为组件源/接口将发生巨大变化

你遵循什么实践,为什么


编辑:很抱歉,我刚刚意识到我把事情弄糊涂了,因为我提到有几个主要产品共享组件——尽管它们共享的组件并不在同一台电脑上运行。我担心的是,这些组件可能会随着产品的每次发布而改变(即使没有更新组件的具体要求),测试也会遗漏一些在组件中完成的细微更改,这些更改与产品上正在完成的特定工作无关。

您应该拥有很少更改的强大接口,因此更改版本应该不那么困难


当您需要更改时,分离版本并针对特定版本工作将增加开销,但这也会鼓励减少总体接口更改,这将有助于长期发展。

我们同时针对多个分支和主干进行开发,我们选择使用我们将要使用的代码构建和测试每个分支去生产吧。我认为其他任何方式都不安全

基本上,如果开发人员正在处理主干,他们所要做的就是担心从主干构建代码并将代码提交到主干

在分支上工作的任何开发人员都需要对该分支进行构建和测试(有多个项目都被分支/标记为相同的构建/发布)。当他们向该分支提交更改时,他们还必须将这些单独的更改合并到主干中


我们希望所有开发人员都熟悉SCM(SVN)并且能够维护多个代码分支。作为一个团队,我们处理主要的框架变化或巨大的代码更改,以最大限度地减少麻烦的合并。

这里有两件事。首先,我认为你是对的;你想根据最新的开发版本而不是旧版本进行构建。如果你还没有,你会看到一个sit在评估中,发布版本的构建爆炸了,你必须通宵清理差异


我个人是“致力于主干,从分支发布”的粉丝无论如何都要建模。所有提交都会转到主干,隔夜生成或CI生成都是针对主干的,人们可以自由创建分支。当您有一个符合验收标准的主干时,标记一个候选版本,但要继续对主干进行更新。如果发布周期较长,则可能会将版本n+1的更改添加到trunk,但理想情况下,您应该缩短发布周期。如果对主干的更改不应出现在发布版本中,并且您遇到需要更改的问题,请针对标记的版本创建一个分支,并确保在实际发布后将所有更改合并回主干。

我们正在使用e定义构建系统,并且在根目录中有我们自己的文件,该文件指定构建应用程序时要使用的每个库的版本

这就减少了在您提到的几个位置更改版本名的需要。

是否(b)是一个有效参数取决于您的共享组件更改的频率和更改的程度。如果它们在您的工作场所中经常更改,则您被“强制”可能是一个有效参数开发最新版本。这本身是否是一个问题是一个有效的问题

然而,从你的角度来看,我不明白你如何能在不针对生产中使用的共享组件进行测试的情况下将代码推向生产。你是否针对发布版本进行第二个测试周期?你只是祈祷没有任何问题吗?坦白地说,(b)在这些情况下可以反转以支持您的观点:如果主干与最近标记的分支有足够的不同,那么必须努力确保您的应用程序能够正确地使用它


如果您的共享组件经常被标记,那么您的同事可能是对的,并且管理从最新标记到主干的增量更改比管理从任意版本X(在上次构建时确定)到任意版本Y(在您选择升级时确定)的更改更容易

按照定义,根据一组共享组件的
trunk
进行开发意味着这些组件是一个“移动目标”——使用这些共享组件的开发人员不一定知道新发现的缺陷或故障是由于项目代码还是共享组件造成的,这会导致生产力损失,IMNSHO

“共享组件”有自己的发布周期。让您的其他开发人员休息一下,修复项目将要使用的共享组件版本,并使用
标记
标签