Git Cherry-pick分支策略?

时间:2018-02-16 23:32:09

标签: git tfs cherry-pick git-cherry-pick branching-strategy

所以我加入了一个团队,最近(去年)从TFS搬到了GIT。分支策略就是这样。 Dev - >发布 - >主。当Dev准备就绪时,合并到Release。从发布构建并部署到各种环境。一旦到达第一个生产环境,就合并到Master,因此master始终是保留的生产状态。如果需要修补程序,请在Dev,Cherry-pick to Release中进行更改,一旦部署到prod,cherry-pick to master。永远不要从Master转发到Release或Release to Dev,总是将代码向一个方向流动....如果我们确实需要向后合并,那么它是另一个樱桃选择(如果你能找到它)或者是一个巨大的合并冲突。

优点:

  • 简单

缺点:

  • 提交历史记录在分支机构之间无用,因为它们不匹配。
  • 意外地直接发布到Release或Master并且没有Dev的更改,永远不会让它回到Dev,直到有人在覆盖或者合并冲突警告某人之后再次注意到该bug(不太可能因为这是一个大多数盲目的合并而且人们将接受培训,以忽略合并冲突。)

所以,这是一个非常TFS集中的做事方式,我正在推动一个双分支系统。开发和硕士。当我们准备好发布时,将Master合并回Dev以确保一切都是同步的,然后Dev to Master标记提交以便在需要时进行简单参考。如果是修补程序,则从master分支,根据需要进行修复,根据需要进行部署并合并回master。如果在Dev中需要,则将Master合并回dev,或者等待下一个版本。

优点:

  • 如果有人从HF分支机构部署并忘记合并回Release(我认为部署只能从Master那里强制合并以强制进行合并......但是构建需要很长时间,因此这是一个棘手的问题...... )
  • 提交历史记录将在分支机构之间匹配,因此您知道事情是同步的
  • 合并冲突应该由进行更改的人大大减少和/或处理,以便他们更好地了解如何处理它们。

缺点:

  • 更复杂,特别是如果你来自TFS ......我曾经去过那里
  • 如果多个修补程序同时发生,则可能会变得混乱。

所以,团队中的另一位开发人员同意Cherry-pick分支策略有一些问题,但认为它的简单性应该意味着不能让它回到开发阶段的变化几乎不会发生,并且单独提交历史记录是不值得的git策略。

问题是,我对此没有回应。从根本上说,没有100%肯定代码的想法就是你在开发中测试的东西让我感到震惊...但是我可以看到其他人如何可能会因为不合并而忘记Hotfix分支中的某些东西的风险更大它回到了师父。另外,我喜欢Git,虽然我不是专家,但是git分支策略对我来说很有意义....但是,自己多年前从TFS过渡到GIT后,我可以看到复杂的东西看起来有多么复杂在它成为每个人的第二天性之前会有很多错误。

我的问题是,是否有更令人信服的理由使用get分支策略?我已经搜索了很多关于“Cherry Picking分支策略”和其他变种的内容并没有提出任何建议,所以我希望我在这里缺少一些重要的东西。

1 个答案:

答案 0 :(得分:0)

也许不是解决方案,而是一些建议:

  • 跟踪修复,这样做更有效率进行合并而不是分享。您可以更好地了解查看图表的历史记录。而且,更重要的是,对于给定的提交/修复,您可以轻松地看到哪些分支包含它。

  • 你应该在分支中修复,因为移动越少,哪个更像生产提交。所以你应该创建一个分支来从'release'分支进行修复(并将它合并到'release'和'dev')或直接修复'release'并合并'dev'。因为如果你在'dev'中进行开发,自“release”发布以来可能会发生很大变化,你可能会遇到引入bug的合并冲突。

当你做樱桃挑选时,很难找到每个提交是否在2个分支中。这可能适用于1或2次提交但在所有情况下都不可行。通过合并,您可以确保所有提交都已报告给'dev'分支。

您可以在此博客文章中找到更多解释git flow的解释: http://nvie.com/posts/a-successful-git-branching-model/