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)打开终端…

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;瞄…

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; …

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中有两个主…

CoreCLR源码探索(四) GC内存收集器的内部实现 分析篇

在这篇中我将讲述GC Collector内部的实现, 这是CoreCLR中除了JIT以外最复杂部分&#xff0c;下面一些概念目前尚未有公开的文档和书籍讲到。 为了分析这部分我花了一个多月的时间&#xff0c;期间也多次向CoreCLR的开发组提问过&#xff0c;我有信心以下内容都是比较准确的&am…

vue开源项目

转载自 vue开源项目 一、前台UI组件库 1.Element 优点&#xff1a;中文文档&#xff0c;ui种类比较全&#xff0c;ui设计简洁清晰 缺点&#xff1a;不够有特点 2.iView 优点&#xff1a;和element的UI很相似&#xff0c;有一些多的补充&#xff0c;可以相互替换 缺点&am…

linux跑循环脚本占内存,Linux下实现脚本监测特定进程占用内存情况

Linux系统下&#xff0c;我们可以利用以下命令来获取特定进程的运行情况&#xff1a;cat /proc/$PID/status其中PID是具体的进程号&#xff0c;这个命令打印出/proc/特定进程/status文件的内容&#xff0c;信息比较多&#xff0c;包含了物理内存/虚拟内存的使用状况&#xff0c…

如何在vm虚拟机里面安装win10操作系统

首先打开虚拟机&#xff0c;点击创建虚拟机 然后选择典型即可&#xff01; 选择稍后安装操作系统 然后选择win10 64位 . 然后在找个路径&#xff1a; 默认60GB即可&#xff0c;也可以更改大小&#xff1a; 最后点击完成&#xff1a; 接下来我们需要用U盘制作一个启动盘…

CoreCLR源码探索(五) GC内存收集器的内部实现 调试篇

在上一篇中我分析了CoreCLR中GC的内部处理&#xff0c; 在这一篇我将使用LLDB实际跟踪CoreCLR中GC&#xff0c;关于如何使用LLDB调试CoreCLR的介绍可以看: 微软官方的文档&#xff0c;地址我在第3篇中的介绍&#xff0c;地址LLDB官方的入门文档&#xff0c;地址 源代码 本篇…

小米路由器青春版装linux,比较费心的折腾 篇二:小米路由器青春版折腾负载均衡...

比较费心的折腾 篇二&#xff1a;小米路由器青春版折腾负载均衡2020-06-04 11:00:233点赞10收藏8评论创作立场声明&#xff1a;本文的核心目的是对于比较久远的硬件进行折腾&#xff0c;提及的软件可以在官网、软件包或者github找到。开篇预警本文截图较多&#xff0c;但是前期…

2019蓝桥杯省赛---java---C---6(旋转)

题目描述 问题描述图片旋转是对图片最简单的处理方式之一&#xff0c;在本题中&#xff0c;你需要对图片顺时 针旋转 90 度。 我们用一个 nm 的二维数组来表示一个图片&#xff0c;例如下面给出一个 34 的 图片的例子&#xff1a;1 3 5 7 9 8 7 6 3 5 9 7这个图片顺时针旋转 9…

linux container 原理,容器概念与Linux Container原理

一、容器与LxC在像KVM等众多主机虚拟化解决方案中&#xff0c;对每一个虚拟机实例提供的是从底层硬件开始一直到上层的环境&#xff0c;在硬件级进行资源划分。虚拟机的内核是运行在硬件内核之上的。由于每个虚拟实例都有自己的运行内核&#xff0c;所以各实例之间有非常好的隔…

微软建议Windows 10开发人员升级到Visual Studio 2017

既然Visual Studio 2017已经发布&#xff0c;那就意味着微软开始专注于让其成为默认开发平台。Creators Update SDK的发布&#xff08;面向即将到来的Windows 10 Creators Update&#xff09;就是这种转变的一个很好的例子。该SDK只有Visual Studio 2017支持。 幸运的是&#…

p2p linux 开源项目,权威开源项目(linux系统、sip、live555)

1、IT知识交流(语言工具、系统问题、开源项目交流)http://stackoverflow.com/tags2、linux系统www.kernel.orghttp://www.gnu.org/copyleft/lesser.html3、pjsuahttp://www.pjsip.org/1、freeswitch1、opensipshttp://opensips.org/pub/opensips/4、live555http://www.live555.…

在Visual Studio中使用任何C++编译器

原文发表时间: 3/07/2017原文发表地址: Use any C Compiler with Visual Studio 微软Visual Studio 2017支持几种C编译器以适应各种各样的代码库。除了很多人熟悉的微软Visual C编译器外&#xff0c; Visual Studio2017还支持Clang, GCC以及其他针对某些平台的编辑器。 这篇文…