用了一段时间github,一直想用时间来对git的使用来做一段笔记,前段时间比较忙,现在沉下心来学习也是极好的。

很多项目开发会采用git这一优秀的分布式版本管理工具来进行项目版本管理。因为git的使用非常灵活,所以在实际操作中会有许多不同的工作流程。不同团队对于不同项目会有不同的协作方式。掌握git版本管理开发,对以后的学习和开发都有很多好处。

首先基本名词要懂:

仓库(Repository)、分支(branch)、工作流(workflow)

1. 仓库(Repository)

在项目的开始到结束,我们会有两种仓库。一种是源仓库(origin),一种是开发者仓库。

源仓库(origin)的有两个作用:

  • 汇总参与该项目的各个开发者的代码

  • 存放趋于稳定和可发布的代码

源仓库应该是受保护的,开发者不应该直接对其进行开发工作。只有项目管理者(通常是项目发起人)能对其进行较高权限的操作。

开发者仓库:

任何开发者都不会对源仓库进行直接的操作,源仓库建立以后,每个开发者需要做的事情就是把源仓库的“复制”一份,作为自己日常开发的仓库。这个复制,也就是github上面的fork。

每个开发者所fork的仓库是完全独立的,互不干扰,甚至与源仓库都无关。  每个开发者仓库相当于一个源仓库实体的影像,  开发者在这个影像中进行编码, 提交到自己的仓库中,这样就可以轻易地实现团队成员之间的并行开发工作。  而开发工作完成以后,   开发者可以向源仓库发送pull request,请求管理员把自己的代码合并到源仓库中,这样就实现了分布式开发工作,和最后的集中式的管理。

2. 分支(branch) 

在git中,分支操作则是每个开发人员日常工作流。利用git的分支,可以非常方便地进行开发和测试。

我们为git定下一种分支模型,在这种模型中,分支有两类,五种:

  • 永久性分支

    • master branch:主分支

    • develop branch:开发分支

  • 临时性分支

    • feature branch:功能分支

    • release branch:预发布分支

    • hotfix branch:bug修复分支

master:主分支从项目一开始便存在,它用于存放经过测试,已经完全稳定代码;在项目开发以后的任何时刻当中,master存放的代码应该是可作为产品供用户使用的代码。每一次master更新的时候都应该用git打上tag,说明你的产品有新版本发布了。

develop:开发分支,一开始从master分支中分离出来,用于开发者存放基本稳定代码。开发者把功能做好以后,是存放到自己的develop中,当测试完以后,可以向管理者发起一个pull request,请求把自己仓库的develop分支合并到源仓库的develop中。

归纳:所有开发者开发好的功能会在源仓库的develop分支中进行汇总,当develop中的代码经过不断的测试,已经逐渐趋于稳定了,接近产品目标了。这时候,我们就可以把develop分支合并到master分支中,发布一个新版本。

 

feature:功能性分支,是用于开发项目的功能的分支,是开发者主要战斗阵地。开发者在本地仓库从develop分支分出功能分支,在该分支上进行功能的开发,开发完成以后再合并到develop分支上,这时候功能性分支已经完成任务,可以删除。功能性分支的命名一般为feature-*,*为需要开发的功能的名称。

release:预发布分支,当产品即将发布的时候,要进行最后的调整和测试,这时候就可以分出一个预发布分支,进行最后的bug fix。测试完全以后,发布新版本,就可以把预发布分支删除。预发布分支一般命名为release-*。

hotfix:修复bug分支,当产品已经发布了,突然出现了重大的bug。这时候就要新建一个hotfix分支,继续紧急的bug修复工作,当bug修复完以后,把该分支合并到master和develop以后,就可以把该分支删除。修复bug分支命名一般为hotfix-*。

示范:举一个例子,A正在做一个团队项目,已经把源仓库fork了,并且clone到了本地。现在要开发网站的某个功能。A在本地仓库中可以这样做:

  1. 切换到develop分支 :>>> git checkout develop

  2. 分出一个功能性分支: >>> git checkout -b feature-discuss

  3. 在功能性分支上进行开发工作,多次commit,测试以后...

  4. 把做好的功能合并到develop中:

    >>> git checkout develop    # 回到develop分支

    >>> git merge--no-ff feature-discuss# 把做好的功能合并到develop中

    >>> git branch -d feature-discuss    # 删除功能性分支

    >>> git push origin develop    # 把develop提交到自己的远程仓库中

3. 工作流(workflow)

    1) 源仓库的构建,创建一个项目,初始化了两个永久性分支master和develop.

    2) 开发者fork源仓库

    3) 把自己开发者仓库clone到本地,命令:git clone

    4) 构建功能分支进行开发,完成后合并到自己的develop分支。

进入仓库中,按照前面说所的构建功能分支的步骤,构建功能分支进行开发、合并,假设我现在要开发一个“讨论”功能:

  >>> git checkout develop    # 切换到`develop`分支

  >>> git checkout -b feature-discuss    # 分出一个功能性分支

  >> touch discuss.js    # 假装discuss.js就是我们要开发的功能

  >> git add .

  >> git commit -m 'finish discuss feature'# 提交更改

  >>> git checkout develop    # 回到develop分支

  >>> git merge--no-ff feature-discuss# 把做好的功能合并到develop中

  >>> git branch -d feature-discuss    # 删除功能性分支

  >>> git push origin develop    # 把develop提交到自己的远程仓库中

  5) 向管理员提交pull request。经过测试以后,觉得没问题,就可以请求管理员把自己仓库的develop分支合并到源仓库的develop分支中,这就是传说中的pull request。

    6) 管理员测试、合并

         1) 对代码进行review,github提供非常强大的代码review功能

         2) 在本地测试新建一个测试分支,测试pull request的代码

         >> git checkout develop    # 进入本地的develop分支

>> git checkout -b livoras-develop

# 从develop分支中分出一个叫livoras-develop的测试分支测试pull request代码

>> git pull https://github.com/livoras/git-demo.git develop

# 把pull request的代码pull到测试分支中,进行测试

         3) 判断是否同意合并到源仓库的develop中,如果经过测试没问题,可以把我的代码合并到源仓库的develop中:

>> git checkout develop

>> git merge--no-ff livoras-develop

>> git push origin develop

使用Git进行协同开发的更多相关文章

  1. 用Git进行协同开发

    用Git进行协同开发 问题场景描述 常常会遇到这样的协同场景:后台的同事和前端的同事需要共同开发一个新功能,而他们的代码相互依赖,所以需要不停地更新各自的代码进行联调. 对于这种场景,最简单的方式就是 ...

  2. Git项目协同开发学习笔记2:项目库开发协作相关命令

    之前介绍了如何用git构建项目库及其后续操作的问题,但主要还是个人的操作问题,不太涉及到项目协作方面的问题,所以来说下这块.传送门在这里(后面的可以不用看了). 1.同步 首先就式同步问题:在项目协作 ...

  3. Git 之 协同开发

    GitHub中多人协同开发和单人开发还是有点差别,协同开发一般有两种方式: 合作者,将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码. 组织,创建一个组织,然后再该组织下可以创建多个项 ...

  4. Git之协同开发

    Github之协同开发 一.协同开发 1.引子:假如三个人共同开发同一份代码,每个人都各自安排了任务,当每个人都完成了一半的时候,提交不提交呢? 要提交,提交到dev吗,都上传了一半,这样回家拿出来的 ...

  5. Git项目协同开发学习笔记1:项目库开发基础git命令

    这年头git基本都是项目开发的标配,之前刚好碰到了就花了两天时间系统学习了下.本文内容基本来自以下tutorial:Learn Git(建议直接去看原文,因为这个网站是有更新的).这个是我看过对git ...

  6. 【转】Android Studio中Git的配置及协同开发

    一. Android Stutio配置git   setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置 ...

  7. Android Studio中Git的配置及协同开发

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51595096 本文出自:[openXu的博客] 目录: 一 Android Stutio配置 ...

  8. git 入门教程之协同开发

    前面我们已经介绍过远程仓库的相关概念,不过那时并没有深入探讨,只是讲解了如何创建远程仓库以及推送最新工作成果到远程仓库,实际上远程仓库对于团队协同开发很重要,不仅仅是团队协同开发的基础,也是代码备份的 ...

  9. 使用git和github进行协同开发流程

    (本文假设各位已经对基本git的基本概念.操作有一定的理解,如无相关git知识,可以参考Pro Git这本书进行相关的学习和练习) 很多项目开发都会采用git这一优秀的分布式版本管理工具进行项目版本管 ...

随机推荐

  1. 自定义jquery公用方法切换当前tab栏

    经常在项目中需要写到切换当前栏目的展示效果,定义公共方法 //切换当前选中 /** * 全局切换或滑动标签的函数.一般使用active作为当前激活标签的类名,如果已使用其它类名,请将类名作为二参传入 ...

  2. node.js(express)连接mongoDB入门指导

    一.写在前面 人人都想成为全栈码农,作为一个web前端开发人员,通往全栈的简洁之路,貌似就是node.js了.前段时间学习了node.js,来谈谈新手如何快速的搭建自己的web服务,开启全栈之路. 二 ...

  3. element-ui Message组件源码分析整理笔记(八)

    Message组件源码: main.js import Vue from 'vue'; import Main from './main.vue'; import { PopupManager } f ...

  4. idea配置热部署

    第一步:添加依赖使用spring-boot-devtools提供的开发者工具spring-boot项目中引入如下依赖 <dependency><groupId>org.spri ...

  5. es6 类 和构造函数

  6. vertical-align 详解

    vertical-align用来设置垂直对齐方式,所有垂直对齐的元素都会影响行高 值: baseline | sub | super | top | text-top | middle | botto ...

  7. postman和接口自动化测试

    1.postman测试接口 (1)首先安装postman 下载地址:https://www.getpostman.com/apps 选择对应版本下载,然后安装即可 (2)使用postman发送请求 比 ...

  8. localStorage/cookie 用法分析与简单封装

    本地存储是HTML5中提出来的概念,分localStorage和sessionStorage.通过本地存储,web应用程序能够在用户浏览器中对数据进行本地的存储.与 cookie 不同,存储限制要大得 ...

  9. Unity Frame Debugger连接Android真机调试

    当用Profiler分析到不是代码导致的性能问题,当前场景最大的性能瓶颈是渲染时,或者自己写的Shader要调试时,都可以用Frame Debugger进行调试. 按下列步骤设置打包,既可以用Prof ...

  10. Python 开发者在迁移到 Go(lang) 时需要知道哪些事?

    [编者按]本文最早由 Repustate 发布,主要介绍将代码迁移至 Go(lang) 时的注意事项.文章系国内 ITOM 管理平台 OneAPM 编译呈现,以下为正文. 这是一篇讲述将大块 Pyth ...