GitHub工作流和发布管理

6

我们对于Git相对较为新。我们使用Git已经大约6个月了,并且使用过GitHub和BitBucket。我们尝试通过使用GitBash学习尽可能多的内容,以便更深入地了解git。

现在我们正处于考虑分支策略的阶段,因此我一直在进行一些研究。

在我看来,对于我们的要求而言,GitFlow过于复杂。总共我们大约会涉及20个不同的项目,并且每个项目只有每2个月左右发布一次版本。经过研究后,GitHub Flow似乎是一个非常简单直接的选项,可以满足我们的需求,但是它似乎存在一个缺陷,我想听取其他人的意见。

在主分支中的任何东西都是可部署的。我们会将其部署到UAT/QA环境中,在那里该版本可能会保持3-4周,具体取决于客户和/或我们签署所有文件所需的时间。同时,其他人可能需要处理完全不同的任务。根据GitHub Flow的流程,如果此时用户从Master分支派生出一个分支,则该用户将包括那些实际上仍然在QA环境中的更改。那么,我是否误解了GitHub Flow的第一点——即主分支中的任何东西都是可部署的——或许只有在代码经过QA等流程之后,这一点才是正确的?

如果那样的话,流程实际上会更像:

  • 从Master派生一个分支
  • 在该分支中提交更改(仅在该分支中)
  • 将该分支与名为“Develop”的单独分支合并
  • 发布到QA/UAT
  • 获得批准后,将该分支与Master合并并部署?

我认为GitHub Flow中的第1点特别困惑我们——当版本仍处于QA阶段时,我们肯定不应该将更改推回Master分支——这可能会使Master分支变得不稳定,并且肯定不是当前产品环境中正在使用的内容。

1个回答

1
根据我在git-flow cheat sheetDriessen's original model上看到的内容,您有一些错误。
虽然我自己没有使用过git-flow工作流,但从我所了解的情况来看,只有当发布准备就绪时才会将master合并,而不是之前。这样,master始终反映出生产环境中的内容-develop是“主”开发分支,从中拉取和合并特性分支。因此,成功的git-flow工作流如下(假设所有这些分支事先存在,除非另有说明):
  1. develop创建一个特性分支(我们将其称为topic
  2. topic上工作一段时间
  3. topic合并回develop
  4. 重复以上步骤几次,直到准备好发布
  5. develop创建一个名为QA-releaseno的新分支
  6. QA-releaseno上进行QA/UAT测试,必要时提交bug修复(您也可以将QA-releaseno合并回develop多次)
  7. 当您准备好发布时,将QA-releaseno合并到masterdevelop中,标记一个master版本,并删除QA-releaseno
此外,您似乎将git-flowChacon的GitHub流程混淆了。 GitHub流程,至少在其最简单的形式中,是这样工作的:
  1. master中分离出一个新的主题分支(这里称为topic
  2. topic上工作(如果您长时间地在其上工作,定期将master合并回去是个好主意)
  3. topic进行QA
  4. topicmaster发布拉取请求(PR)
  5. 一旦PR已经被每个人都满意地代码审查,就将topic合并回master
  6. 立即发布master,或者至少相当快地发布
这个工作流程适用于快速发布周期的团队和组织(每周多次)。QA不是在应用程序级别进行,而是在单个功能、任务或工单的级别进行。由于发布周期具有即时(或至少快速)反馈,master将始终反映生产环境中的内容。

2
你是不是指的是GitFlow,而不是GitHub Flow?http://scottchacon.com/2011/08/31/github-flow.html - dotdev
@dotdev:在我看来,OP混淆了git-flow和GitHub flow,因此感到困惑。我已经更新了答案。 - Sebastian Lenartowicz
我认为我混淆了两者,因为我引入了“开发”分支的概念,这个概念可以很容易地被称为“DevReleases”。我将其引入GitHub Flow的原因是,如果我们想要部署到QA(使用TeamCity和Octopus),理想情况下,我们不希望每次都更新TeamCity以查看新的功能分支,即如果QA发布始终来自“开发”分支,那么将会更容易。 - dotdev
@dotdev:所以,你正在查看的是一种混合工作流程,既不是git-flow也不是GitHub flow - 对吗?这当然没有什么问题,但是在SO答案中推荐特定的流程超出了范围(因为它主要基于个人意见)。 - Sebastian Lenartowicz
感谢您的所有输入。如果为QA发布而设立一个发布分支与GitHub Flow不符,那么我想您是正确的,它是一种混合模式。我想我是在试图澄清的同时确定这种流程的潜在风险。我们已经强调,分支1和分支2可能会意外地合并到Releases分支中,因此QA测试可能会同时测试和批准这两个分支,但是分支1或分支2本身却没有被测试和批准。 - dotdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接