我的团队有大约十几名开发人员,按照滚动发布模式制作Web应用程序:一旦某个功能集准备好,就由高级开发人员进行审核,并推入QA系统,然后再进入生产系统。这通常每个工作日会发生多次。
目前使用的版本控制系统是SVN,而推送到QA和生产系统则是使用一个奇怪的内部部署工具完成的,它可以在SVN上工作,但是基于文件(因此,如果您需要推送X文件的新版本,并且X文件有来自其他变更集的未推送更改,而您不想立即推送它们,则会出现问题)。
我计划宣传转换到Git,所以我正在考虑如何设计工作流程。像经常链接的成功的Git分支模型之类的通常建议并不适用于我们没有版本化发布的情况。
问题1:是否有任何已记录的工作流程可供进一步参考,类似于上面链接的工作流程,专门针对滚动发布进行优化?或者您建议采用哪种方式?
目前使用的版本控制系统是SVN,而推送到QA和生产系统则是使用一个奇怪的内部部署工具完成的,它可以在SVN上工作,但是基于文件(因此,如果您需要推送X文件的新版本,并且X文件有来自其他变更集的未推送更改,而您不想立即推送它们,则会出现问题)。
我计划宣传转换到Git,所以我正在考虑如何设计工作流程。像经常链接的成功的Git分支模型之类的通常建议并不适用于我们没有版本化发布的情况。
问题1:是否有任何已记录的工作流程可供进一步参考,类似于上面链接的工作流程,专门针对滚动发布进行优化?或者您建议采用哪种方式?
我尝试在纸上建模一个工作流程,使用特性分支和常规的master,并且有进一步的分支来镜像QA和生产服务器的状态。(只能从master合并到这里。)
我无法克服的问题是,当master中的某些内容由于某种原因不适合发布时。例如,假设功能分支foo被认为完成,合并到master并推送到qa分支。然后同样的事情发生在功能分支bar上。现在,在QA系统上,我们发现foo已经损坏,需要更多的开发,而bar已经准备好推送到生产系统。但是,在master上没有包含bar但不包含foo的提交,那么我们应该推送什么呢?唯一想到的是撤销将foo合并到master的提交。(在链接后面,Linus解释了撤销合并提交时遇到的几个问题。) 问题2:有什么更优雅的方法来解决这个问题吗?