规范的Git使用

Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高,

实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢失等。

就像写代码需要代码规范一样,使用Git进行代码管理同样需要一个清晰的流程和规范, Git Flow就是一个被广泛认可的Git使用最佳实践。

Git Flow是Vincent Driessen提出的一个分支管理的策略,http://nvie.com/posts/a-successful-git-branching-model/

应用这个规范可以使得版本库的演进保持简洁,主干清晰,各个分支有不同的职责,在很大程度上减少冲突的产生。

Git Flow开发流程

Git Flow通过对分支的管理,实现版本迭代的清晰。

这个流程图是应用Git Flow的标准流程,可以看到,不同的分支在产品研发和上线的不同阶段有不同的作用,扮演了不同的角色。

Git Flow不同分支的角色

结合图片,简单介绍一下不同分支的职责。

1.Production分支

这个分支是发布到生产环境的代码,这个分支只能从其他分支合并,不能在这个分支直接修改。

2.Develop分支

这个分支是主开发分支,包含所有要发布到下一个Release的代码,这个主要合并自其他分支,比如Feature分支。

3.Feature分支

Feature 分支主要用来开发一个新的功能,一旦开发完成,合并回Develop分支,并且进入下一个Release,Feature分支可以选择删除或者保留。

4.Release分支

当需要发布一个新Release的时候,基于Develop分支创建一个Release分支,Release分支在测试过程中可能会修改,完成Release后,合并到Master和Develop分支。

5.Hotfix分支

当在Production发现新的Bug时候,需要创建一个Hotfix分支, 完成Hotfix后,合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。

Git Flow使用原则

  • Master分支是线上稳定分支,Release通常用作测试分支,Develop分支是开发应用的主分支
  • 所有的功能开发都在Feature分支进行,然后合并到Develop分支
  • Release分支发布后出现问题,直接在Release分支修改,避免Develop分支代码污染

Git Flow分支协作最佳实践

我们在应用Git Flow的时候,也遇到了一些问题,比如开发结束后,在develop分支进行merge开发分支操作,出现冲突如果不能很好的解决,容易对develop分支的代码造成污染。

下面是实际开发中使用的流程,在Feature分支上合并develop代码,然后合并到develop分支上,流程更加清晰,冲突优先在开发分支解决。

一个开发人员典型的提交流程:

//新建分支
git checkout develop
git pull origin develop
git checkout -b myfeature //在分支上开发
git add ***
git commit -m "*****" //在分支开发过程中合并develop分支到本分支(先把自己的工作commit到本地)
git checkout develop
git pull origin develop
git checkout myfeature
git merge develop (如果没有冲突,就继续开发,如果有冲突,执行下面过程)
首先在本地解决冲突,再把冲突解决commit
git add ***
git commit -m "*****" //在分支开发结束,需要将本分支合并到develop分支(先把自己的工作commit到本地)
git checkout develop
git pull origin develop
git merge myfeature (如果没有冲突,就推送到远程)
git push origin develop
(如果有冲突,则解决冲突,再commit,并推送到远程:)
git add ***
git commit -m "*****"
git push origin develop

应用Git Flow的目的是更好的进行版本管理和持续集成,有些细节并不一定要遵循这个模型,可以根据团队规模进行简单的调整,适合的才是最好的。  

 

Git Flow,Git团队协作最佳实践的更多相关文章

  1. 应用Git Flow—Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  2. Git Flow——Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  3. 使用VS2013、TFS2013和Git进行分布式团队协作

    题记:呵呵,首先声明,题目起的有点大,其实我只想介绍下VS2013和TFS2013新加入的Git功能,也不是在VS中使用Git的详细向导(以后有空再详细分享给大家).这篇文章虽然在写这篇文章<V ...

  4. 图文详解如何利用Git+Github进行团队协作开发

    团队协作开发中,大部分都会用到版本控制软件,比如Git.Svn等.本文将通过一个实例,详细讲解在真实的工作环境中,一个团队应该如何利用Git+Github进行协作开发,即详解Git工作流程.并就其中比 ...

  5. CI Weekly #18 | flow.ci iOS 最佳实践出炉,正式支持 Git@OSC 构建

    如大家所期待,flow.ci 现已支持开源中国的代码仓库 - 码云,可以直接构建 Git@OSC 的项目了,点击创建项目-选择代码仓库-选择码云-绑定 OSChina 账户-选择要构建项目,教程看这里 ...

  6. Git Flow 分支管理简述

    概述 Git 是什么 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的 ...

  7. Git flow 工作流与规范

    概述 简版图: PS. 可能用到的命令: 1.从指定 commit拉出新分支   git checkout commitId -b 本地新branchName git checkout 9fbc3d0 ...

  8. Git 常用命令和 Git Flow 梳理

    git 用 git 有一段时间了,之前没有详细地了解 git flow,导致协作过程中或多或少出现了一些头疼问题.最近静下心来理了下 git flow 的整个流程,再回头看开朗了不少,总结到这里.介绍 ...

  9. git flow常用命令

    https://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html https://blog.csdn.net/shu580231/ ...

随机推荐

  1. vc++基础班[26]---进程的相关操作

      ①.ShellExecute 进行进程的创建,属于 shell api: //int iRet = (int)ShellExecute(m_hWnd, _T("open"), ...

  2. 题解-bzoj3569 DZY Loves Chinese II

    Problem bzoj 题意概要:给定\(n\)点\(m\)边无向连通图,\(Q\)次询问删除\(k\)条边后是否仍然连通,强制在线 Solution 半年前考到过这类题目(询问删除任意两条边使得图 ...

  3. mgo mode说明

    mgo 是 MongoDB 的 Golang 驱动. 连接池 我们通过 Dial 函数创建一个新的 session: session, err := mgo.Dial(url) 创建的 session ...

  4. I/O 模型

    5种I/O模型的基本区别: 阻塞式I/O 非阻塞式I/O I/O复用 信号异步模型 异步I/O 1. 阻塞 I/O 最流行的I/O模型是阻塞I/O模型,缺省情形下,所有套接口都是阻塞的.我们以数据报套 ...

  5. liunx 利用nginx 实现负载均衡

    一般采用软件实现负载均衡的有Nginx.apache.nginx 近年来使用频繁,其官网上面显示可以承载5万并发访问量,太牛了. nginx 相比 apache优势明显:Nginx 服务程序比较稳定, ...

  6. 基于vue-cli3的vue项目移动端样式适配,lib-flexible和postcss-px2rem

    1,安装 flexible和 postcss-px2rem(命令行安装) npm install lib-flexible --save npm install postcss-px2rem --sa ...

  7. error: js/dist/app.js from UglifyJs Unexpected token: name (Dom7)

    What you did I have installed Swiper as normal dependency in my Project and import it to my scripts ...

  8. asynicio模块以及爬虫应用asynicio模块(高性能爬虫)

    一.背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是 ...

  9. 【python】gevent协程例子

    说在前面:用协程还是多线程需要仔细考量.我在做实验时请求了100w个ip,分别用pool为1000的协程和64个线程来跑,结果是多线程的速度是协程的10倍以上. 一个简单的协程例子 #!/usr/bi ...

  10. kali 局域网嗅探

    1.局域网图片嗅探 工具  arpspoof arpspoof -i eth0 -t 192.1681.10(网卡 目标地址) 192.168.1.1 局域网网关,如果在Windows中可以使用局域网 ...