新开发项目的Git工作流程

时间:2016-12-28 15:03:07

标签: git git-flow

我正在开始一个新项目,并且已决定我们将使用git进行版本控制。

这是一个涉及从头开始开发多个组件/微服务的项目。

为了解决我们组织中我们有初级开发人员,高级开发人员,开发人员,架构师等的复杂问题,我希望在gitflow上使用或多或少的git工作流,以便我们可以确保开发人员可以工作在功能分支上,在进入开发分支之前,我们有一些代码审查流程。我希望拥有与生产/生产就绪代码相对应的主分支,并发布分支以表示当前正在发布的版本。

这是一个敏捷项目,所以我的想法是开发与sprint代码相对应的分支(单元测试和评审)以及与发布相对应的发布分支(= 3个sprint)。

我面临的唯一问题是如何在开始时定义主分支以及主分支和开发之间的关系。

由于它是一个新的开发项目,我们从没有生产代码开始,一切都基本上从功能分支开始,当我们有生产就绪代码时,移动到开发,发布,然后是主。

有关如何以良好方式处理此事的任何建议,这也是一个好主意

提前致谢

4 个答案:

答案 0 :(得分:0)

首先创建一个master分支,然后从master分支创建其他分支。供您参考,我发现this gitflow分支模型图很有帮助,并已在多个项目中成功。

不要这样做。首先从最简单的分支策略开始,然后根据复杂性和需求,您可以创建或适应更复杂的分支策略。

答案 1 :(得分:0)

我认为position: static对你所描述的项目来说很合适。

如果你刚刚开始,我会创建gitflow,但请将其留空。 master可以填充静态文件(.gitgnore或类似的东西)。然后,您开始在develop分支中开发并合并到feature。在三次冲刺后,您创建一个develop分支并进行扩展测试。

在所有测试通过并且您愿意发布代码后,您将合并到release。所以你从现在起三个月后首先合并为主人。

答案 2 :(得分:0)

首先,如果您提出这个问题,那么您将希望从一个干净,简单的流程开始,然后一旦团队中的每个人都排得很好,您就可以考虑加入其他分支机构或水平。如果你发现自己不需要,不要感到惊讶!尝试保持单独的并行分支全部同步可能是一项非常重要的任务,当您在它们之间选择功能时,可以使用可理解的提交日志。

  

注意:下面的壁球合并仅适用于已完成的功能   合并为主人。在开发功能时,如果您定期   需要从主人更新您的功能分支,不要压缩您的更新   合并 master。

     

有些人更喜欢保留每个功能分支的个人子提交   合并回主人。我没有,但觉得排除挤压,它   没有改变工作流程。

我建议你使用这个简单的流程:

    主人的
  • HEAD适用于所有意图develop
  • 所有开发都发生在从master的HEAD剪切的功能分支上(除非它是发布分支的补丁)
  • 一旦经过测试,功能将合并回主控(如果你想在master中使用一个提交点,则合并壁球!)
    • 有时,您可能希望同时对多个功能进行集成测试
    • 合并(在这里压缩,如果你想要一个提交点!)它们在一起,它们出现在master的组合分支中,在提交时分支,正在测试的最早特征有它的分支从大师那里剪下来。
    • 测试组合分支然后将其合并为主(不需要压缩,因为每个功能已经被压缩到此组合功能分支上的单个提交,并且您不想要松散不同的单个功能提交)
    • 删除合并分支
  • 删除合并的功能分支
  • 我们测试HEAD master,当候选版本准备就绪时,我们将分支一个主要的次要编号版本分支(如release-2.4) - 这永远不会合并回master。
  • 我们还将分支上的初始提交标记为完整版2.4.0
  • 分支的任何补丁都会从中获取一个功能分支,然后在合并时(如果您希望补丁成为发布分支中的单个提交点,则压缩!)返回新的标记,如2.4.1 < / LI>
  • 需要访问Master或其他版本分支的realease分支中的任何修补程序/补丁都是在master和其他发布分支上手动完成的,而不是通过合并整个发布分支。希望修复应该是微小的改变

发布并非必须在HEAD,您可以在最后一个发布分支之后使用任何提交。

一旦您顺利运行,您可以尝试加入额外的&#39; staging / develop&#39;分支机构,我认为你会发现有限的价值和令人头痛的问题让他们保持清洁和同步。我一直发现,试图让单独的开发和主分支更多地工作而不是价值。

这种流程最大的好处之一就是你的历史是多么干净。如果你看一下它的网络图,它就会发现它是一个连续的链,只有特征分支正在处理,(压缩)特征提交给主人),并释放永不合并的分支。任何人都能清楚地理解一切都没有当地的git大师来解释,也没有深刻理解贵公司可能拥有的任何特殊的开发过程。

答案 3 :(得分:0)

以下是一些选项:

Git Flow(从开发分支,合并到开发)

git流背后的想法是开发人员构建并为开发&#34;开发&#34;分支,一旦权力决定了它的发布时间,你就会切断&#34;切断&#34;离开那个分支并创建一个发布分支进行优化,直到它足够好以实际发布。

<强>优点:

  • 您几乎总是在使用最新版本的代码。如果您进行了更改,则立即将其合并到develop分支中,其他所有人都可以构建它。这很方便!
  • 这是众所周知的流量之一,所以很多人都对此感到满意

<强>缺点:

  • 开发代码通常可能不稳定或彻底破坏。由于QA通常不直接针对开发分支进行测试,因此在下一个版本准备好被删除之前,问题可能会被忽视。换句话说,质量反馈可能会延迟
  • 如果您使用敏捷,则很难跟踪代码的位置。想象一下,有一张分配给特定版本和sprint的票证。您为此编写的代码最终会被合并到开发中,尽管该票证的版本或冲刺是什么。如果经理去并将该票据移动到其他版本或冲刺,您可能必须将代码从开发分支或做一些黑客攻击,使一切运作良好。如果经常发生这种情况,这可能变得乏味且难以管理
  • 在执行修补程序或修复发布分支时,您必须更改普通工作流,而不是分支发布分支,主服务器或完全不同的东西。这使工作流程变得复杂,对于较新的开发人员来说可能会变得非常混乱

主人分支;合并到发布分支

我认为这是最直接的,但肯定有缺点。我们的想法是,所有特征都是从master(它始终匹配生产)分支出来的,假设这些分支可以随时合并到任何分支中。当您准备开始测试版本时,只需从主分支创建一个新的Release_v99分支(具有适当的名称)即可。您合并了要发布的功能分支,然后针对Release_v99分支进行测试。

<强>优点:

  • 安全!功能分支始终是安全的#34;要在任何地方合并,因为它们是直接在生产代码之外构建的。
  • 功能分支并未绑定到尚未部署的特定代码版本,因此您可以非常轻松地根据需要移动票证而不会出现任何重大问题
  • 如果您的发布分支变成了灾难(由于还原或其他原因),很容易将其废弃并制作新的,因为您的功能分支可以轻松地再次合并到其中。
  • 如果你想长跑&#34;对于其他测试环境的分支,您可以轻松地将您的功能合并到这些,而不会意外地引入其他人员的更改

<强>缺点:

  • 您可能会构建旧代码,因此会遇到一些合并冲突。如果许多人正在处理类似的事情,那么解决陈旧的代码有时会导致问题