我们有一个4人的开发团队,最近搬到了Git。我们希望通过分支和合并来学习有关工作流程的最佳实践。
我们正在使用Git Flow的轻量级版本。我们有一个dev,staging和一个master分支,它们彼此都是线性的。
最重要的是,我们使用功能和修补程序分支来处理新功能并修复错误。
我有以下问题:
我认为我们应该从master分支并合并功能分支,因为dev中可能存在一些我们可能不希望合并到staging和master的东西。
你有什么看法?什么是最佳做法?答案 0 :(得分:24)
这总取决于您希望如何工作以及团队协议。那就是说。
在Atlassian page you have a very nice explanation of this workflow
中使用这种工作流程的整个想法是拥有一个稳定的版本分支,如果你需要足够的信心它仍然可以稳定并且没有任何新的功能或重构会滑入,你可以立即工作并修复任何错误没有注意到。
还要为每个新功能提供隔离和自由,这些新功能将在其自己的分支中开发,而不会产生其他功能的噪音。 最后,您将把您的功能合并到您的dev分支中,然后从那里合并到下一个版本的主分支中。
我唯一要为你推荐的是学习如何在每次将另一个功能合并到dev中时在dev分支之上重新设置功能分支,以避免在合并时解决冲突,但是在功能分支上单独进行你知道你的变化是什么。
答案 1 :(得分:21)
虽然Git Flow是一个出色的分支模型,但您提出的问题是一个更大问题的症状:对于在消费者网络产品上工作的小团队来说,Git Flow太重了(我假设您正在工作在消费者网络产品上,如果您正在编写核电站控制室,请随意忽略)。
我想鼓励您考虑使用极其简单的分支模型进行持续部署(CD):
现在很容易设置CD:
master
创建一个新分支。 master
,并观看它是否正常运行。 对它有很多共同的反对意见,所有这些都可归纳为"但如果我介绍一个错误怎么办?!"。答案是"你将解决它!"。如果您编写测试,如果您监视生产站点,如果您进行代码审查,如果您进行结对编程,如果您使用功能标记,并且如果您保持小功能,那么您从CD获得的好处将超过偶尔的问题任何一天。
我鼓励你试试。它会释放你的思想专注于真正重要的事情:建立一个伟大的产品!如果你不相信我,请看看excellent presentation from Github。
答案 2 :(得分:8)
我们确定了一个名为Git Flow的工作流程,但我们不是从dev分支功能,而是从当前版本中分支它们。这使我们能够以不同的速度处理单独的问题。如果他们在质量保证方面取得成功,他们会进入发布阶段。
关于分支和部署:
工作流程如下:
ISSUE_NUMBER
。在部署发布版本并发现严重错误之后,我们从主服务器分支修补程序分支(例如,修补程序/ ISSUE_NUMBER
),将其合并回主服务器并再次部署。