何时在git中分支?

问题描述:

我刚开始使用git,虽然它比较容易找出如何使用git做些事,但在与git做些事情时,我很难找出何时在git中分支?

例如,一个人通常在什么时候分支一个项目?

我在考虑分支当前项目的每个版本,以及何时完成将它与主人合并 - 这是常见的做法吗?

我相信有人会做与我做的事情不同的事情。然而,这是我遵循:

  • 始终为每个功能创建一个分支(他们后来合并回)
  • 为每个错误分支修复
  • 让主分支是干净的通过不使它工作进展(WIP)
+2

“让主分支干净,不要让它成为工作进行中(WIP)” 我喜欢这个想法。 – LDK 2009-07-28 01:53:20

我不确定分支当前项目的每个版本是什么意思。

无论如何,你创建'主题分支'的git建议。通过“主题分支”,这意味着您在开发功能/错误时创建分支。假设我正在使用jQueryUI,并且我被要求为jQuery Calendar添加一个功能,该功能允许用户指定不可选择的日期。

如果我在名为master的分支中,我将创建一个名为'SpecifyDateExclusion'的分支并开始进行更改。任何和所有与此功能相关的代码都将进入这个分支。

master 
    | 
    | 
    |___ SpecifyDateExclusion 

虽然我正在使用此功能,但是出现了一个错误报告,Opera 10中的日历已损坏,此错误现在需要修复。我回到我的主分支并创建另一个名为Opera10BugFix的分支,并开始修复它中的错误。

master 
    | 
    | 
    |___ SpecifyDateExclusion 
    | 
    | 
    |___ Opera10BugFix 

很快,你可以有一个像

master 
    | 
    | 
    |___ SpecifyDateExclusion 
    | 
    |___ Feature1 
    | 
    |___ Feature2 
    | 
    |___ Feature3 
    | 
    |___ Opera10BugFix 
    | 
    |___ BugFix1 
    | 
    |___ BugFix2 

什么是你可能会问的优势分支机构?

好处是它在准备我的发布时给予我的灵活性。假设我的下一个版本主要是关于错误修复。

我将从master创建一个名为'InterimBugFix'的新分支,并合并我所有的bug修复分支。

如果我想创建一个bug/feature版本的混合体,我将从master创建一个名为“NextVersion”的分支,并合并我的功能/ bug修复分支。

Git对于如何管理这些分支非常强大,如果你能想象得到,Git会让你做到这一点。

这取决于你的“分支策略”有很多答案。最简单的两个(以我的经验)是任务/功能分支和发布分支。你使用的将取决于你的发布周期如何工作等等。

如果你正在整合并不断释放,然后任务/功能分支意义,因为他们离开了“大师”(在其他VCS主干)在一个相对稳定的状态,使其释放容易。但是如果你有一个更加结构化的发布周期,也许发布分支会更有意义,因为它们可以用来更仔细地定义添加到每个发行版的内容。当然,混合策略也是可行的。

我通常使用任务/功能分支,因此每个错误或功能请求都是分支的。然后工作,完成后,合并回主。

Git最棒的地方在于它不会强迫你做任何决定。 Git的糟糕之处在于它不会对你做出任何决定。

您的工作流程完全取决于您。您是打算合作还是独立开发?发布之间的交付时间短吗?这些限制可能有助于定义合适的工作流程。

我在4名开发人员的小团队中工作,进行为期两周的迭代周期。在周期开始时,我们就范围达成一致并针对主人开发。我们预计超过两周的任何事情都会在分支中移动(或开始生命)(这种情况不会经常发生,我们的范围很紧张)。

在两周周期结束时,我们执行我们的QA,标签和释放。开始下一个周期,那些其他分支合并回主。

如果你需要修补的释放,我们创建了一个分支,提交,QA,标签和释放。

对于任何实验,我们通常会创建一个新的分支,并保持它从主隔绝,直到它适合于合并的,或丢弃。

总之,我们的团队分支时:

  • 特点超出我们的迭代周期
  • 补丁发布
  • 体验功能

我们的工作流程是非常集中的,而且可能不典型许多Git用户。既不是对错,也只是选择最合适的东西。

+0

“针对主人开发” - 这是否意味着您使用主分支进行开发? – LDK 2009-07-28 02:31:16

+0

这是正确的。 – 2009-07-28 06:16:43

+0

这非常重要:Git没有版本控制工作流程。相反,它是一个版本控制工作流构造工具包。就像使用乐高建筑套件一样,将所有东西放在一起都是很多乏味,困难,乏味的工作,但结果会变得非常棒,因为它是你自己建造的,手,它是根据您的需求量身定做的。说得好! – 2009-07-28 15:49:07

Web应用程序开发,我们这样做:

我们维持一个所谓的 “生产” 纯净的分支。它包含在现场网站上存在的代码。

在任务分支中发生的任何更改。所以你可能会看到一个分支Task-13923-add-feature-x。这些分支是从生产分支创建的,并且生产分支在合并到生产之前必须合并到其中(所以它始终是干净快进,没有潜在冲突)。

其他人从合并时的“生产”分支一次进入他们的任务转移到保持最新。

有疑问时,分支。分支机构便宜,新分支机构的信息很容易转移到旧分支机构。当一个分支失效时,它很容易被杀死。