Git分支策略小开发团队

我们有一个networking应用程序,我们几乎每天更新和发布。 我们使用git作为我们的VCS,而我们目前的分支策略非常简单和破坏:我们有一个主分支,并且检查我们感觉良好的变化。 这工作,但直到我们检查一个突破性的变化。

有没有人有一个小团队满足以下要求的最喜欢的git分支策略:

  1. 适用于2到3名开发人员的团队
  2. 轻量级,并没有太多的过程
  3. 允许开发人员轻松隔离错误修复和更大function的工作
  4. 允许我们保持一个稳定的分支(当我们必须让我们的生产服务器工作的时候,那些“糟糕的”时刻)

理想情况下,我很乐意看到一个开发一个新bug的开发过程

您可能从Scott Chacon在Pro Git中描述的工作stream程中受益匪浅。 在这个工作stream程中,你有两个始终存在的分支, 掌握发展

master表示您的项目的最稳定版本,并且您只能从此分支部署到生产环境。

发展包含正在进行的变化,可能不一定准备好生产。

开发分支中,您可以创build主题分支来处理各个function和修复。 一旦您的function/修复准备就绪,您就可以将其合并到开发环境中 ,在这一点上,您可以testing它与同事合并的其他主题分支的交互方式。一旦开发处于稳定状态,将其合并到主服务器中 。 从主站部署到生产应始终安全。

Scott将这些长期运行的分支描述为代码的“孤岛”,其中不太稳定的分支中的代码将最终“gradle”到经过团队testing和普遍批准后认为更稳定的分支。

一步一步,在这个模型下你的工作stream可能看起来像这样:

  1. 你需要修复一个错误。
  2. 创build一个名为myfix的分支,该分支基于develop分支。
  3. 处理这个主题分支中的错误,直到它被修复。
  4. myfix合并为开发 。 运行testing。
  5. 你发现你的修复与另一个主题分支hisfix冲突,你的同事合并到你的修复工作时发展
  6. myfix分支中进行更多的更改来处理这些冲突。
  7. 合并myfix开发并再次运行testing。
  8. 一切工作正常。 合并发展成为
  9. 随时从主人部署到生产,因为你知道它是稳定的。

有关此工作stream程的更多详细信息,请参阅Pro Git中的“ 分支工作stream程”一章。

在作为新手进入后,试图find一个直接的策略,教给其他从未使用过源控制的开发者。 这是一个适合http://nvie.com/posts/a-successful-git-branching-model/我试图使用标准的GIT工作stream程,这在手册页,但它完全混淆了我和我的观众。;

在过去6个月中,我只需要解决冲突两次。 我已经添加了一些步骤,以便在合并之后始终进行testing,并在开发function的同时大量​​(上午和下午一次)“取回和合并”或“拉取 – 恢复”。 我们还使用github.com作为拉取最新代码的中心位置。

(让我的评论高于自己的答案,因为我最初应该有。)

来自Github的Scott Chacon:

我们如何做到这一点,什么是GitHubstream?

  • 主分支中的任何东西都是可部署的
  • 为了处理新事物,可以创build一个描述性的分支(例如:new-oauth2-scopes)
  • 在本地提交该分支,并定期将您的工作推送到服务器上的同一个命名分支
  • 当您需要反馈或帮助,或者您认为分支已准备好进行合并时,请打开一个请求
  • 在其他人审查并签署了该function之后,您可以将其合并到主设备中
  • 一旦合并并推送到“主”,您可以并应该立即进行部署

看到整个文章的更多细节: http : //scottchacon.com/2011/08/31/github-flow.html

请注意,“拉请求”是Github的一个发明,它的东西是烘焙到他们的网站,而不是Git本身: https : //help.github.com/articles/using-pull-requests/

使用master分支作为您的开发分支,并创build发布分支来执行错误修复。

在开发窗口期间,任何新的function都将在master进行(直接提交或作为主题分支提出拉取请求,直到您 – 图中未显示)。 一旦实现了所有计划的function,请inputfunction冻结并执行testing。 当你快乐的时候,把master版本标记为v1.0

随着时间的推移,你的用户会在v1.0发现bug,所以你需要从这个标签创build一个分支(比如在1.0版本之后命名)并修复分支中的bug。 当你有足够的错误修复,你认为它保证一个新的版本,然后将其标记为v1.0.1并合并到master

同时在master分支上会出现一个新的开发窗口,最终会被标记为v1.1

冲洗并重复。

这遵循语义版本编号逻辑。

  ---------(v1.0)--------------------------------(v1.1)-----------------------------> master \ \ ---(v1.0.1)---(v1.0.2)---> 1.0 ---(v1.1.1)---(v1.1.2)---> 1.1 

在一个VCS中,只有一个“主”分支显示出其极限,因为你不能在一个分支上同时进行所有的开发工作。
这意味着你需要知道什么时候分支

但是在DVCS中(如“分散式”VCS),还有一个出版物问题 ,分支机构保留在您的存储库本地,以及您正在推送或从中抽取的分支。

在这种情况下,首先确定您的并发开发工作,并决定发布(推/拉)stream程。 例如(这不是唯一的方法):

  • prod是生产中的代码的只读公共分支。 每个人都可以从中拉出来,以便:
    • 在当前的开发之上进行重新设置(对于本地testing,或者在本地dev dev上,在prod分支上的prod repo中完成的修复)
    • 分支做新function(来自已知的稳定代码)
    • 分支启动下一个发布分支(即将在生产中的分支)
      没有人应该直接推动产品(因此只读)
  • 发布是一个读写合并分支,其中相关的提交选项是下一个版本的一部分。
    每个人都可以推动发布来更新下一个版本。
    每个人都可以从发布中获取更新他/她的本地合并stream程。
  • featureX是一个私人的读写分支(因为它不需要推到中央的prod回购),并可以在dev回购之间推/拉。 它代表着中长期的努力,与日常开发不同
  • 主人代表当前的开发者,并且在开发者回购之间被推/拉。

存在其他发布pipe理stream程,正如这个SO问题所certificate的 。

在这里阅读ReinH的Git工作stream程: http ://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html

这对于小团队来说非常有效。 这里的目标是确保所有可能不稳定的东西进入某种分支。 当您准备好在function部门之外工作的每个人使用它时,只能合并回主服务器。

注意:这个策略并不是特定的,但是git使得这个策略变得非常简单。