Git,Git Flow,GitLab使用指南

高效利用一次蹲坑时间,看看如何使用Git Flow进行高效开发,什么才是Git提交的正确姿势,怎样使用GitLab进行Code Review:

  • 使用Git Flow高效开发;

  • Git提交正确姿势,Commit message编写指南;

  • 使用GitLab进行团队内的Code Review;

使用Git Flow进行高效开发

在工作环境中,绕不开效率一词,由于任何一次版本迭代,几乎都是需要整个团队协作的,所以,高效开发不仅仅是个人效率问题,还涉及到整个团队的协作效率。个人开发,可以怎么顺手怎么搞,怎么开心怎么玩,但在团队里协作的时候,只一个人顺手开心是不够,还需要整个团队协作高效。提高效率,一般我们会这么搞:

  • 遵守行业内的最佳实践;

  • 借助工具自动遵循规范;

什么是Git Flow?

Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具,一篇名为A successful Git branching model的博文介绍了一种在Git之上的软件开发模型。通过利用Git创建和管理分支的能力,为每个分支设定具有特定的含义名称,并将软件生命周期中的各类活动归并到不同的分支上。实现了软件开发过程不同操作的相互隔离。这种软件开发的活动模型被称为Git Flow

Git Flow备忘清

Git Flow是一个Git扩展集,按Vincent Driessen的分支模型提供高层次的库操作, 这个备忘清单展示了Git Flow的基本操作和效果。

Git Flow介绍

  1. Git Flow常用的分支:master, develop, feature, hotfix, release;

  2. 历史分支(master , develop): 相对使用仅有的一个master分支,Gitflow工作流使用2个分支来记录项目的历史。master分支存储了正式发布的历史,而develop分支作为功能的集成分支。 这样也方便master分支上的所有提交分配一个版本号;

  3. 功能分支(Feature): 每个新功能位于一个自己的分支,这样可以push到中央仓库以备份和协作。 但功能分支不是从master分支上拉出新分支,而是使用develop分支作为父分支。当新功能完成时,合并回develop分支。 新功能提交应该从不直接与master分支交互;

  4. 发布分支(release): 一旦develop分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从develop分支上fork一个发布分支。 新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上—— 这个分支只应该做Bug修复、文档生成和其它面向发布任务。 一旦对外发布的工作都完成了,发布分支合并到master分支并分配一个版本号打好Tag。 另外,这些从新建发布分支以来的做的修改要合并回develop分支;

  5. 维护分支(hotfix): 维护分支或说是热修复(hotfix)分支用于生成快速给产品发布版(production releases)打补丁,这是唯一可以直接从master分支fork出来的分支。 修复完成,修改应该马上合并回master分支和develop分支(当前的发布分支),master分支应该用新的版本号打好Tag。为Bug修复使用专门分支,让团队可以处理掉问题而不用打断其它工作或是等待下一个发布循环。 你可以把维护分支想成是一个直接在master分支上处理的临时发布;

借助工具自动遵循规范

Visual Studio有一个Git Flow插件GitFlow.VS, Sourcetree最新版本集成了Git Flow插件,这些插件的好处是最大化地简化了命令,只有Start FeatureFinish FeatureStart ReleaseFinish ReleaseStart HotfixFinish Hotfix几个操作,其他工作,Git Flow自动帮你完成:

  • 新建功能分支:Git Flow会自动拉取最新的develop分支,然后自动从develop分支创建一个新的feature分支;

  • 完成功能分支:Git Flow自动合并回develop分支,并默认删除feature分支,可以更改默认行为;

  • 新建发布分支:Git Flow会自动拉取最新的develop分支,然后自动从develop分支创建一个新的release分支;

  • 完成发布分支:Git Flow自动合并回develop,master分支,如果提供tag名称,则会自动在master打上Tag,并默认删除feature分支,可以更改默认行为;

  • 新建修复分支:Git Flow会自动拉取最新的或者指定Tag的master分支,然后自动从master分支创建一个新的hotfix分支;

  • 完成修复分支:Git Flow自动合并回develop,master分支,如果提供tag名称,则会自动在master打上Tag,并默认删除hotfix分支,可以更改默认行为;

Visual Studio有一个Git Flow插件

通过Tools > Extensions and Updates > Online > Search gitflow 安装Git Flow插件

装好插件之后,Team Explorer会多一个GitFlow

点击GitFlow后,如果是首次点击,则会提示初始化操作

初始化之后,每次进入GitFlow,则会根据状态提供创建或结束feature/release/hotfix分支

再次强调: 我们需要借助一个工具帮我们自动化遵循规范,比如GitFlow插件。

Git提交正确姿势:Commit message编写指南

Git 每次提交代码,都要写 Commit message(提交说明),否则就不允许提交,基本上,你写什么都行,但是,一般来说,commit message 应该清晰明了,说明本次提交的目的。目前,社区有多种 Commit message 的写法规范。本文介绍Angular规范,这是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

Commit message 的作用

格式化的Commit message,有几个好处。

  1. 提供更多的历史信息,方便快速浏览;

  2. 可以过滤某些commit(比如文档改动),便于快速查找信息;

  3. 可以直接从commit生成Change log;

Commit message 的格式

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。

<type>(<scope>): <subject>// 空一行<body>// 空一行<footer>

其中,Header 是必需的,Body 和 Footer 可以省略。不管是哪一个部分,任何一行都不得超过72个字符(或100个字符)。这是为了避免自动换行影响美观。

Header

Header部分只有一行,包括三个字段:type(必需)、scope(可选)和subject(必需)。

  1. type用于说明 commit 的类别,只允许使用下面7个标识。

    • feat:新功能(feature)

    • fix:修补bug

    • docs:文档(documentation)

    • style: 格式(不影响代码运行的变动)

    • refactor:重构(即不是新增功能,也不是修改bug的代码变动)

    • test:增加测试

    • chore:构建过程或辅助工具的变动

  2. scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

  3. subject是 commit 目的的简短描述,不超过50个字符。

    • 以动词开头,使用第一人称现在时,比如change,而不是changed或changes

    • 第一个字母小写

    • 结尾不加句号(.)

Body

Body 部分是对本次 commit 的详细描述,可以分成多行, 有两个注意点:

  • 使用第一人称现在时,比如使用change而不是changed或changes;

  • 应该说明代码变动的动机,以及与以前行为的对比;

Footer

Footer 部分只用于两种情况:

  • 如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法;

  • 如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue (Closes #123, #245, #992), GitHub这个功能很好用;

Revert

还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以revert:开头,后面跟着被撤销 Commit 的 Header。

使用GitLab进行团队内Code Review

Code Review的工具很多,Facebook非常有名的Phabricator已经开源。对于经常玩GitHub的人,应该很喜欢GitHub的PR功能,很多公司使用GitLab或者Gogs搭建自家的Git服务,GitLab的Merge Request功能同样可以用于团队内Code Review。

Branches Protection Setting

如果团队内部需要强制进行Code Review, 那么拥有GitLab管理权限的开发人员,可以把Repo设置成只有develop和master分支,并把develop,master分支都保护起来,不允许任何开发人员直接push到这些分支,开发人员只能把Repo FORK成自己的Repo。

Your project > Setting > Protected Branches

创建Merge Request

协作开发的同事,只能通过把Repo FORK 成自己的Repo,之后从自己Repo clone到本地,然后使用Git Flow开发,一旦开发到一个需要Review的点,通过Merge Request向主Repo请求合并

Code Review

一旦Merge Request创建成功之后,主Repo拥有Code Review权限的人就会收到通知,Code Review的时候, 打开Open的Merge Request,会看到Commits, Changes,打开Changes,可以提交自己的Review建议,被Review的人继续根据这些建议,在自己的Repo里修改,修改好之后提交,这时会在自己的Repo里及主Repo的Open Merge Request里看到相应更改,因此可以继续Review流程,直到Merge Request被合并,如下图:

Syncing a FORK

因为团队的Repo是多人协作开发的,也就是说,团队的主Repo会被多个开发人员Fork,当每个协作开发的开发人员对团队的主Repo请求Merge Request之后,负责进行Code Review的同事进行Review,完成代码Review之后会合并到主Repo。这时,每个Fork的Repo需要同主Repo进行同步才能拿到最新代码,具体操作步骤如下:

查看本地Repo是否设置了upstream;

D:\repos\Apollo>git remote -v
origin  http://git.code.oa.com/yingtingxu/Apollo.git (fetch)
origin  http://git.code.oa.com/yingtingxu/Apollo.git (push)

如果没有设置,则进行设置

D:\repos\Apollo>git remote add upstream http://git.code.oa.com/ACD/Apollo.gitD:\repos\Apollo>git remote -v
origin  http://git.code.oa.com/yingtingxu/Apollo.git (fetch)
origin  http://git.code.oa.com/yingtingxu/Apollo.git (push)
upstream        http://git.code.oa.com/ACD/Apollo.git (fetch)
upstream        http://git.code.oa.com/ACD/Apollo.git (push)

获取主Repo的更新

D:\repos\Apollo>git fetch upstream
remote: Counting objects: 9, done
remote: Finding sources: 100% (5/5)
remote: Getting sizes: 100% (6/6)
remote: Total 5 (delta 0), reused 5 (delta 0)
Unpacking objects: 100% (5/5), done.
From http://git.code.oa.com/ACD/Apollo* [new branch]      develop    -> upstream/develop* [new branch]      master     -> upstream/master

合并更新,以合并develop为例

D:\repos\Apollo>git checkout developD:\repos\Apollo>git merge upstream/develop
Updating e0d7ffe..2b7875f
Fast-forwardversion.props | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)

原文地址:http://www.xyting.org/2017/02/19/git-flow-gitlab.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arm linux gcc 编译,Linux arm-linux-gcc交叉编译环境配置

Linux下的arm-linux-gcc交叉编译环境安装安装arm-linux-gcc(1) 打开终端&#xff0c;使用sudo命令进入从超级管理员&#xff1a;sudo su输入超级管理员密码。(2) 使用cd命令进入桌面&#xff1a;cd Desktop(3)复制arm-linux-gcc-4.4.3.tar.gz安装包到Ubuntu桌面下面(4)打开终端…

MySQL greatest()和least()函数

转载自 MySQL greatest()和least()函数 MySQL GREATEST和LEAST函数介绍 GREATEST和LEAST函数都使用N个参数&#xff0c;并分别返回最大和最小值。下面说明GREATEST和LEAST函数的语法&#xff1a; GREATEST(value1, value2, ...); LEAST(value1,value2,...);参数可能具有混合…

环东风尚注注意事项

1.先对钱&#xff08;现金&#xff09;。 2.看美团和飞猪上的订单。 3.根据订单在订单表上做预订。 4.对本子上入住的人是否和电脑上的一致。 5.对房卡和电脑上的是否一致。 6.查看退宿的身份证是否已退。 退房&#xff1a; 1.先退钱 2.退身份证 3.退卡 开房&#xff1a; 1.收…

2019蓝桥杯省赛---java---C---1(求和)

题目描述 代码实现 package TEST;public class Main {public static void main(String[] args) {int cnt 0;for (int i 1; i < 2019; i)if (check(i)) cnt i;System.out.print(cnt);}static boolean check(int n) {String an"";if (a.contains("2")…

使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表

昨天&#xff08;星期五&#xff09;下班&#xff0c;19&#xff1a;00左右回到家&#xff0c;洗个澡&#xff0c;然后20&#xff1a;30左右开始写代码&#xff0c;写完代码之后&#xff0c;上床看了《生活大爆炸10季》17、18两集&#xff0c;发现没有更新到19集&#xff0c;瞄…

cs1.5 linux服务端,Linux下架设CS1.5服务器

所需文件&#xff1a;1、hlds_l_3110_full.bin2、cs_15_full.tar.gz3、engine_i386.so(据说这个东东可以免cdkey&#xff0c;可我不用也可免cdkey)把所有的文件都拷贝到/usr/cs目录下&#xff1a;# chmod x hlds_l_3110_full.bin# tar xzvf hlds_l_3110_full.tar.gz# tar xzvf …

MySQL isnull()函数基本指南

转载自 MySQL isnull()函数基本指南 MySQL ISNULL函数简介 ISNULL函数接受一个参数&#xff0c;并测试该参数是否为NULL。如果参数为NULL&#xff0c;则ISNULL函数返回1&#xff0c;否则返回0。 下面说明了ISNULL函数的语法&#xff1a; ISNULL(expr)请考虑以下示例&#…

ppt2010基础操作笔记

一、PPT2010的界面&#xff1a; 1.功能选项卡 2.大纲区 3.标题栏 4.备注页 5.状态栏 6.工作区 二、创建PPT演示文稿 1.开始–》PPT2010 2.在PPT里面新建–》文件–》新建–》样本模板–》选择模板。 三、PPT2010中的视图&#xff1a; 1.普通视图 2.大纲视图 3.幻灯…

2019蓝桥杯省赛---java---C---2(矩阵切割)

题目描述 代码实现 package TEST;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int max sc.nextInt();int min sc.nextInt();int sum 0, temp;while (max ! 0 && min ! 0) {if (max …

期待微软平台即服务技术Service Fabric 开源

微软的Azure Service Fabric的官方博客在3.24日发布了一篇博客 Service Fabric .NET SDK goes open source &#xff0c;介绍了社区呼声最高的Service Fabric开源的情况以及当前的情况&#xff0c;这次开源了Service Fabric的.NET SDK部分&#xff0c;主要是两个&#xff1a; …

java中input表单中的type=date返回类型【切记】

input表单中的type”date”返回类型为Date类型&#xff01; input表单中的type”date”返回类型为Date类型&#xff01; input表单中的type”date”返回类型为Date类型&#xff01; 重要的内容说三遍&#xff0c;今晚可算是及坑死我了&#xff0c;一直以为是String类型 &…

全自动安装 linux光盘,CentOS 7.1全自动安装光盘制作详解

安装系统的话&#xff0c;常用方式就是通过U盘&#xff0c;光盘&#xff0c;kickstart网络自动化安装&#xff0c;网络自动化安装固然好&#xff0c;但是有时候在现场做项目的话根本就没有kickstart环境&#xff0c;甚至连基本的网络建设都没有弄好&#xff0c;此时该如何安装系…

MySQL last_insert_id()函数

转载自 MySQL last_insert_id()函数 MySQL LAST_INSERT_ID函数简介 在数据库设计中&#xff0c;我们经常使用代理键使用AUTO_INCREMENT属性为主键列生成唯一的整数值。 当您将新行插入到具有AUTO_INCREMENT列的表中时&#xff0c;MySQL会自动生成一个唯一的整数&#xff0c…

2019蓝桥杯省赛---java---C---4(质数)

题目描述 代码实现 package TEST; public class Main {public static void main(String[] args) {int cnt 0;for (int i 2; ; i )if(check(i)){cnt ;if(cnt 2019){System.out.println(i);break;}}}public static boolean check(int n){//判断一个数是否为质数for (int i 2…

eclipse下载与安装步骤详解,包含解决错误(最全最详细)

以前一直用的是myeclipse,今天有幸接触eclipse,那我们就先来安装的配置一下&#xff0c;下载地址&#xff1a;点击下载密码&#xff1a;h0kg&#xff0c;下载完成以后就可以安装了&#xff0c;首先我们来先安装jdk1.7, 打开jdk的安装包 双击即可&#xff0c; 直接点击下一步&…

CoreCLR文档翻译 - GC的设计

此文档来源于CoreCLR的BOTR(The Book of the Runtime), 点击打开原文一切著作权归微软公司所有 GC的设计 作者: Maoni Stephens (maoni0) - 2015 提示: 推荐看 The Garbage Collection Handbook 这本书学习更多关于GC的知识 (在文章底部的链接中) 组件结构 在GC中有两个主…

MySQL cast()函数

转载自 MySQL cast()函数 MySQL CAST函数介绍 MySQL CAST()函数的语法如下&#xff1a; CAST(expression AS TYPE);CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一&#xff1a;BINARY&#xff0c;CHAR&#xff0c;DATE&#xff0c;DATETIME…

linux 编译 expat,关于expat库的编译

1、expat库简介refer to wiki:To use the Expat library, programs first register handler functions with Expat. When Expat parses an XML document, it calls the registered handlers as it finds relevant tokens in the input stream. These tokens and their associat…

node.js安装不好怎么办

试试重启电脑 可能解决了百分之99.9的问题

计算机操作基础

一、计算机硬件组成&#xff1a; 1.CPU 2.主板 3.内存 4.硬盘 5.光驱 6.显卡 7.网卡 8.声卡 9.电源 10.操作系统 二、CPU型号&#xff1a; 1.INTEL 1)主频&#xff1a;2.8-3.7GHZ 2)核心&#xff1a;双核、四核、八核、十核 3)高速总缓冲&#xff1a;2-20MB 4)…