gitlab 作为版本控制器,基本使用和github 相同,以下是一些策略和介绍:

Git 分支管理策略可以参考下面三个链接:

http://www.ruanyifeng.com/blog/2012/07/git.html

http://www.ituring.com.cn/article/56870

本文也是根据以上两个链接内容作出的一些总结。

为什么用Git?

Git真的改变了开发商认为合并分支的方式。从经典的CVS/Subversion世界我来自,合并/分支一直被认为是一个有点吓人(当心合并冲突)和你只是偶尔做的事情。

但使用Git,这些行动是非常便宜和简单的,他们被认为是一个您的日常工作流程的核心部分,真的。

由于它的简单性和重复性,分支和合并不再是害怕。版本控制工具应该协助分支/合并比其他任何东西。

足够的工具,让我们的发展模式。我将在这里提出的模型基本上是一组程序,每个团队成员都必须遵循,以来管理软件开发过程中。

分散而集中

我们使用的存储库设置和这个分支模型很好地工作,这是一个中心的“真实”回购。请注意,这是只考虑回购是中央(因为Git是一个软件,有没有这样的东西作为在技术层面中央回购)。我们将把这个回购的原点,因为这个名字是所有Git用户熟悉。

每一个开发人员pull,push到origin。但除了集中的pull和push关系,每个开发人员也可能从其他同行pull变化,形成小组。例如,这可能是有用的工作,与两家或更多的开发人员在一个大的新功能,在推动工作之前,过早地。在上图中,有alice和bob、alice和david,david和clair。

从技术上讲,这无非意味着alice定义了一个git远程,叫bob,指着bob的库,反之亦然。

主要分支¶:master branches

在核心的发展模式,极大地鼓舞了现有的模式。中央正回购持有的两个主要无限期的分支:

主分支:master

发展分支:develop

在origin,主分支(master)应该被每一个Git用户熟悉。平行于主分支,另一个分支存在称为开发(develop)。

我们认为origin/master是一个主要的分支,在源代码的头总是反映一个生产准备状态。

我们认为,origin/develop成为主要的分支,在源代码的头总是反映一个国家的最新发布的发展变化的下一个版本。有些人会把这个称为“integration branch”。这个分支可以用来生成代码的最新隔夜版本。

master分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动告一段落,产生了一份新的可供部署的代码时,master分支上的代码会被更新。同时,每一次更新,最好添加对应的版本号标签(tag)。

辅助分支:

下一个主要分支的主和发展,我们的发展模式使用各种支持分支机构,以帮助团队成员之间的并行发展,便于跟踪功能,准备生产版本,并协助快速解决生产问题。与主要分支不同的是,这些分支总是有一个有限的生命时间,因为它们最终会被移除。

我们可以使用的不同类型的分支:

用于开发新功能时所使用的feature分支:Feature branches

用于辅助版本发布的release分支      :Release branches

用于修正生产代码中的缺陷的hotfix分支:Hotfix branches

这些分支中的每一个都有一个特定的目的,并且被约束到严格的规则,分支可能是它们的分支,分支必须是它们的合并目标。我们将在一分钟内步行穿过他们。

从技术角度看,这些分支“特殊”是不意味着的。分支类型被分类,我们如何使用它们。他们当然是普通的Git分支。

特征分支

分支可以来自:

develop

必须合并到:

develop

分支命名惯例:

feature分支的命名可以使用除master, develop, release-*, or hotfix-* 之外的任何名称。

功能分支(有时也可以被叫做“topic分支”)是用来开发新功能,为即将到来或未来一个遥远的未来。当开始开发一个功能时,该功能将被合并的目标发布可能是未知的,在这一点上。一个特征分支的本质是,它的存在,只要功能是在开发中,但最终会被合并回发展(肯定增加新功能,即将发布的)或丢弃(在一个令人失望的实验的情况下)。一般而言,feature分支代码可以保存在开发者自己的代码库中而不强制提交到主代码库里。

只有在开发商回购通常存在特征的分支,不在原点。

创建一个功能分支¶

当开始工作的新功能,分支从发展分支

$ git checkout -b myfeature develop

Switched to a new branch "myfeature"

结合完成的功能开发

完成的功能可能会被合并成的开发部门一定会添加到即将发行的:

$ git checkout develop

Switched to branch 'develop'

$ git merge --no-ff myfeature

Updating ea1b82a..05e9557(Summary of changes)

$ git branch -d myfeature

Deleted branch myfeature (was 05e9557).

$ git push origin develop

--no-ff标志导致合并总是创建一个新的提交对象,即使合并可以快速向前行。这就避免了一个功能分支的历史存在的信息丢失和所有提交,一起添加的功能。比较:

在后一种情况下,它是不可能看到Git历史的交付对象一起实现了一个功能,你需要手动读取所有的日志信息。回复一个整体特征(即一组提交),在后一种情况下是一个真正的头痛,而这是很容易做到的,如果使用--no-ff标志。

是的,它会创造一个更大的(空)的提交对象,但增益远远大于成本。

Release branches 

分支可以来自:

develop

必须合并到:

develop and master

分支命名惯例:

release-*

发布分支机构支持新产品发布的准备。他们允许我最后点睛的交叉T的。此外,他们允许小错误修正和准备发布元数据(版本号、建立日期等)。通过在一个发布分支上做所有的工作,开发分支被清除以接收下一个大版本的功能。

关键时刻要从一个新的发行分公司的发展是在开发(几乎)反映了所需的新版本的状态。至少所有的功能,有针对性的发布必须建立在这一点上,在这一点上,以发展为目标。所有的功能,在未来的发布,可能不是他们必须等到发布分支是分支关闭。

它正是在一个发布分支的开始,即将发布的版本号被分配一个版本号而不是更早的。在那一刻起,develop部门反映了“next release”的变化,但目前还不清楚是否“next release”将最终成为0.3或1,直到 release branch开始。这一决定是在release branch的开始,是由项目的规则对版本号的碰撞。

创建release branch

release branch是从develop分支中创建的。比如说版本1.1.5是当前产能发布,我们有一个大的发布将要出来。develop状态准备“next release”,我们认为这将成为1.2版(而不是6或2)。所以我们分支机构关闭,并给release branch一个名称,反映了新的版本号:

$ git checkout -b release-1.2 develop

Switched to a new branch "release-1.2"

$ ./bump-version.sh 1.2

Files modified successfully, version bumped to 1.2.

$ git commit -a -m "Bumped version number to 1.2"

[release-1.2 74d9424] Bumped version number to 1.2

1 files changed, 1 insertions(+), 1 deletions(-)

创建一个新的分支,切换到它,我们的版本号。在这里,bump-version.sh是一个虚构的shell脚本中的一些文件的工作副本的变化以反映新的版本。(这当然是一个手动的改变点,有些文件改变。)然后,被碰撞的版本号。

这个新分支可能存在一段时间,直到release可能被卷出。在此期间,错误修正可以应用于这一分支(而不是develop branch)。在此处添加新功能是严格禁止的。它们必须被合并成发展,因此,等待下一个大发行。

整理发布分支

当release branch的状态已经准备好成为一个真正的release时,需要进行一些操作。首先,release branch是合并到master(因为每个提交都是一个新版本的定义,请记住)。下一步,commit onmaster必须标记为方便未来参考这个历史版本。最后,发布分支的变更需要重新合并,以便将来发布还包含这些错误修正。

在Git中前两步:

$ git checkout master

Switched to branch 'master'

$ git merge --no-ff release-1.2

Merge made by recursive.(Summary of changes)

$ git tag -a 1.2

现在发布的版本,并标记为未来的参考

Edit: You might as well want to use the -s or -u <key> flags to sign your tag cryptographically.

为了保持release branch的变化,我们需要合并回到develop,但在Git:

$ git checkout develop

Switched to branch 'develop'

$ git merge --no-ff release-1.2

Merge made by recursive.(Summary of changes)

这一步可能会导致一个合并冲突(甚至可能,因为我们已经改变了版本号)。如果是这样,修复它并提交。

现在我们真的做了,release branch可能被删除,因为我们不需要它了:

$ git branch -d release-1.2

Deleted branch release-1.2 (was ff452fe).

Hotfix branches 

分支可以来自:

Master

必须合并到:

develop and master

分支命名惯例:

hotfix-*

hotfix分支和release分支非常像,也要准备一个新的生产版本,尽管是意外。它们出现的必要性立即采取行动的不受欢迎的生活生产的版本。当一个生产版本的一个关键的错误必须立即解决,一个hotfix分支可能离开上主分支,标志着生产版本对应的tag。

其实质是团队成员的工作(在develop branch)可以继续,而另一个人正在准备一个快速的生产修补。

创建hotfix分支

hotfix分支与主支了。例如,说1.2版是目前的生产发行版,运行的生活和造成麻烦,由于严重的错误。但发展变化是不稳定的。我们可以再分支hotfix分支开始解决的问题:

$ git checkout -b hotfix-1.2.1 master

Switched to a new branch "hotfix-1.2.1"

$ ./bump-version.sh 1.2.1

Files modified successfully, version bumped to 1.2.1.

$ git commit -a -m "Bumped version number to 1.2.1"

[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1

1 files changed, 1 insertions(+), 1 deletions(-)

别忘了在分支关闭后凸点版本号!

然后,修复该错误并提交一个或多个单独提交的修补。

$ git commit -m "Fixed severe production problem"

[hotfix-1.2.1 abbe5d6] Fixed severe production problem

5 files changed, 32 insertions(+), 17 deletions(-)

完成一个hotfix分支

完成时,该功能需要合并到master,但也需要合并回develop,为了维护,修正是包含在下一版本,以及。这是完全类似于release branch如何完成。

首先,更新master和release 的 tag。

$ git checkout master

Switched to branch 'master'

$ git merge --no-ff hotfix-1.2.1

Merge made by recursive.(Summary of changes)

$ git tag -a 1.2.1

编辑:你可能想使用-s or -u <key>flages标示你的标签密码。

下一步,包括bugfix在develop也一样:

$ git checkout develop

Switched to branch 'develop'

$ git merge --no-ff hotfix-1.2.1

Merge made by recursive.(Summary of changes)

该规则的一个例外是,当release branch目前存在,修补程序的变化需要合并到release branch,而不是develop。后合并修正到release branch将最终导致了被合并到develop,当release branch完成。(如果工作需要修正,不能立即开发这等待release branch来完成,你可以安全的把这个 bugfix 合并到 develop。)

最后,删除临时分支:

$ git branch -d hotfix-1.2.1

Deleted branch hotfix-1.2.1 (was abbe5d6).

本篇博客转载:https://www.cnblogs.com/hanpengshuai/p/5363930.html

gitlab 的使用策略和简单介绍的更多相关文章

  1. Windows2008修改密码策略简单介绍

    Windows2008修改密码策略简单介绍 Windows的密码策略,确实是挺繁琐的,刚接触SharePoint2010,装的windows2008 R2,就遇到了改密码策略的问题. 打开本地安全策略 ...

  2. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  3. [转]Oracle数据库ASH和AWR的简单介绍

    在Oracle数据库中,有时我们可能会遇到这样的术语:ASH和AWR,那么它们是怎样产生的呢?它们的作用又是什么呢?本文我们就来介绍这一部分内容.       1.10g之前 用户的连接将产生会话,当 ...

  4. SQLite数据库和JPA简单介绍

    SQLite数据库和JPA简单介绍 一.SQLite简单使用 SQLite是遵循ACID的关系数据库管理系统,它的处理速度很快,它的设计目标是嵌入式的,只需要几百K的内存就可以了. 1.下载SQLit ...

  5. MPI编程简单介绍

    第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储 ...

  6. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

  7. 安卓开发-使用XML菜单布局简单介绍

    使用xml布局菜单   目前为止我们都是通过硬编码来增加菜单项的,android为此提供了一种更便利的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地 ...

  8. Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍

     Android ImageLoader(Android-Universal-Image-Loader)[1]概述及使用简单介绍 一,前言:为什么要引入Android-Universal-Imag ...

  9. MySQL存储引擎简单介绍

    MySQL使用的是插件式存储引擎. 主要包含存储引擎有:MyISAM,Innodb,NDB Cluster,Maria.Falcon,Memory,Archive.Merge.Federated. 当 ...

随机推荐

  1. 基于物品的协同过滤算法(ItemCF)

    最近在学习使用阿里云的推荐引擎时,在使用的过程中用到很多推荐算法,所以就研究了一下,这里主要介绍一种推荐算法—基于物品的协同过滤算法.ItemCF算法不是根据物品内容的属性计算物品之间的相似度,而是通 ...

  2. Dictionary tabPage使用

    public override bool AccptChange() { //if (oldvalue == null || oldvalue.Count <= 0) //{ // return ...

  3. HADOOP docker(六):hive简易使用指南

    前言1.hive简介1.1 hive组件与相应功能:1.2 hive的表类型1.3 分区表1.3 分隔符1.4 hive的数据存储2.数据类型2.1 基本数据类型2.1 复杂数据类型2.3 NULL3 ...

  4. Bad Cowtractors(最大生成树)

      Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= ...

  5. Alpha冲刺——第三天

    Alpha第三天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  6. Combobox的使用,日期选择器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  7. js 控制

    js 制动控制 代码 是 :setInterval(function(){$(".egg").click();},1000); 使用方法:调出浏览器放控制台(console),一般 ...

  8. 整理下本周工作中遇到的疑问;uid/euid/suid;docker镜像管理

    1.系统中的父子进程关系,以及docker是如何处理的这种父子进程关系,线上问题发现,子进程长时间得不到退出. 2.调用system系统调用发生了啥事情,发现大量的页表拷贝. 3.通过shell命令通 ...

  9. 如何实时获取DBGrid 中当前单元格输入的内容?

    如何获取DBGrid 中当前单元格输入的内容? 还没输入完成,我想实时获取 Cell中的内容,以便作其他处理, 用什么事件呢? 所以Field的Onchange事件是没用的. 这个问题简单啊,每输入1 ...

  10. overflow:scroll 在ios 滚动卡顿

    使用 -webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果. 值 auto 使用普通滚动, 当手指从触摸屏上移开,滚动会立即停止. touch 使用具有回 ...