我们有一个客户端(有一个客户端,有一个客户端)让我们对代码库的更改请求感到厌烦(在PHP中).我们的第一个响应是在SVN的主干中工作,但客户端经常回来并请求某个更改需要尽快推送到实时服务器.另一方面,其他变化突然降低了优先级,最初与其他变化(看似)组合在一起.
我们正在考虑为每个变更请求使用分支.这疯了吗?还有哪些其他解决方案?
谢谢!
编辑:这是一个非常难以选择正确答案的问题.感谢大家的回答.
编辑:我知道我选择的最佳答案并不是特别受欢迎.我也想找到解决这个问题的技术方案.但是现在我认为如果客户想要的软件具有可以以模块化方式部署的功能...... 在我们使用版本控制系统时不应该解决这个问题.它必须被设计到软件中.
编辑:现在已经差不多一个月了,我的同事/客户已经说服了我,多个分支是要走的路.这不仅仅是因为客户的精神错乱,而且还基于我们需要能够确定某个功能是"准备就绪"还是"需要更多工作"等等.我没有SVN和我在一起,但我们合并中使用来自SVN食谱的建议:在合并分支从它被分流至头文件的修订版本.
此外,使用此系统,我们在某个时刻合并所有分支,这将成为新的QA,然后是实时构建.然后我们从那里开始.
最后编辑(也许):几个月后,这个系统仍在为我们工作.我们为每张票创建分支,很少遇到问题.另一方面,我们确实试图将事情分开,就像人们在做什么一样......
两年后:我们现在使用GIT,现在这个系统实际上非常合理.
也许Subversion在这里不是最好的工具.虽然在SVN中创建所有这些分支都很便宜,但重新合并它们会变得既耗时又痛苦.
如果你看看GIT而不是SVN,你会发现一个版本控制系统,它在整合时更加强大.除此之外,它具有"樱桃采摘"的特定功能.也就是说,可以从一个开发树中轻松"挑选"单个提交,并将其添加到另一个(实时分支).此外,在GIT中将多个提交合并为一个提交是很容易和方便的(您甚至可以从另一个树添加到特定的提交).
因此,构建单一功能提交然后挑选它们可能是您的解决方案.
如何为客户的实时版本创建分支,为新开发创建分支,为正在进行的更改创建分支.
当您没有被任务淹没时,在新开发分支中工作.
当你正在修复他们一直让你疯狂的所有有趣的东西时,在正在进行的变化分支中工作.修复后,将其合并到"实时"分支和"新开发"分支.
这样,您的客户的分布在他们自己的世界中,您的新开发将继续(并且可以在您需要时合并)并且还可以捕获您的维护.
我们在一个新的开发分支工作,然后每次我们决定制作补丁时,我们分支主干然后发送该补丁以进行Q/A. 如果它来回走了一段时间,我们在该分支中工作以修复那些合并回主干的问题,以确保一切都是同步的.如果在之前版本需要解决的事实之后很久就会出现问题,我们可以随时将其修复回该分支,然后再将其合并到主干中.
线程开启者解释的场景是功能分支模式的一个示例:http://svnbook.red-bean.com/en/1.5/svn.branchmerge.commonpatterns.html#svn.branchmerge.commonpatterns.feature
当你必须保持主要开发线(主干)稳定并且你必须开发许多可能会破坏主线的功能时,它们是非常有用的.
缺点是您必须使各个分支与主干保持同步:当功能A的分支正在开发中时,功能B的分支可以达到稳定状态并在主干中关闭并合并:在这种情况下,您必须将B分支引入的更改从主干合并到A分支.因此,经常将分支与主干合并是一个好习惯,以避免在分支生命结束时出现大量冲突的问题情况,以便追踪和解决.