我刚开始使用 Git,虽然很容易找到如何在 Git 中执行某些操作,但我很难弄清楚何时在 Git 中执行这些操作。
例如,什么情况下通常会分支一个项目?
我正在考虑为当前项目的每个版本创建一个分支,并在完成后将其合并到主分支中 - 这是常见的做法吗?
我刚开始使用 Git,虽然很容易找到如何在 Git 中执行某些操作,但我很难弄清楚何时在 Git 中执行这些操作。
例如,什么情况下通常会分支一个项目?
我正在考虑为当前项目的每个版本创建一个分支,并在完成后将其合并到主分支中 - 这是常见的做法吗?
我确信有人会以与我不同的方式做事。然而,这是我遵循的方式:
我不确定您所说的“将当前项目的每个版本分支化”是什么意思。
无论如何,git建议您创建“主题分支”。通过“主题分支”,它意味着在您处理特性/错误时创建一个分支。比方说,我正在处理jQueryUI,并被要求为jQuery Calendar添加一个新功能,允许用户指定不能选择的日期。
如果我在名为master的分支中,我会创建一个叫做“SpecifyDateExclusion”的本地分支,并开始进行更改。与此特性相关的所有代码都将存放在这个分支中。
master
|
|
|___ SpecifyDateExclusion
我在处理这个功能的时候,收到了一个报告,称Opera 10中的日历出了问题,需要立即修复。于是我回到我的主分支并创建了另一个名为Opera10BugFix的分支,开始在其中修复这个错误。
master
|
|
|___ SpecifyDateExclusion
|
|
|___ Opera10BugFix
很快,你可能会有类似以下的分支:
master
|
|
|___ SpecifyDateExclusion
|
|___ Feature1
|
|___ Feature2
|
|___ Feature3
|
|___ Opera10BugFix
|
|___ BugFix1
|
|___ BugFix2
你可能会问,这有什么好处呢?
好处在于它给我在准备发布时带来了灵活性。假设我的下一个版本主要是关于修复漏洞的。
我将从主分支(master)创建一个名为 "InterimBugFix" 的新分支,并合并所有我的漏洞修复分支。
如果我想创建一个包含漏洞修复/功能的混合版本,我将从主分支(master)创建一个名为 "NextVersion" 的分支,并合并我的功能/漏洞修复分支。
Git对于如何管理这些分支非常强大,如果你能想象到什么,Git就可以让你实现。
Production
只会快进。我们通常将当前被接受的代码保留在master
中。在推送之前,开发人员总是被要求在master
上进行变基 - 这通常会得到一个干净的快进。如果团队足够小,我有时会在测试/上线之前将master
变基到production
上。这在99%的情况下都能正常工作,并且具有提供非常线性历史记录的好处。如果团队更大,则我会坚持定期将Production
合并到master
中,以便每个人都有更新的代码。缺点是你会失去线性历史记录。 - gahooa如果有疑问,就分支。 分支是很便宜的,而且新分支的信息可以很容易地转移到旧分支上。当一个分支不再有用时,可以轻松地将其删除。
这取决于你的“分支策略”,有很多不同的答案。根据我的经验,最简单的两种是任务/特性分支和发布分支。你使用哪种将取决于你的发布周期如何运作,以及其他因素。
如果你正在持续集成和发布,那么任务/特性分支是有意义的,因为它们可以使“主干”(在其他版本控制系统中称为trunk)保持相对稳定的状态,从而使发布变得容易。但是,如果你有一个更结构化的发布周期,也许发布分支会更有意义,因为它们可以用来更仔细地定义每个发布所添加的内容。当然,混合策略也是可行的。
我通常使用任务/特性分支,这样每个错误或功能请求都会被分支。然后进行工作,并在完成后合并回主干。