用了一段时间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. SharePoint designer workflow给一个hyperlink类型得field赋值, How to set value to a hyperlink field by designer workflow

    通过worlfow给一个链接类型得field赋值: 格式是: {link}, {linkDisplayname} 一定要注意逗号后面有个空格. 举个栗子: 如果一个链接显示为 Approve / Re ...

  2. [Java][读书笔记]多线程编程

    前言:最近复习java,发现一本很好的资料,<J​a​v​a​2​参​考​大​全​ ​(​第​五​版​)​> ​ ​H​e​r​b​e​r​t​.Schildt.书比较老了,06年的,一些 ...

  3. 如何让VB6代码编辑器垂直滚动条随鼠标滚轮滚动

    VB6毕竟是很老的产品了,它的代码编辑器垂直滚动条并不能随鼠标的滚轮而滚动,这个问题会让我们在编写代码的时候觉得很不方便,不过还是有一种方法可以解决这个问题的.    先下载一个微软发布的“VB6ID ...

  4. jdk1.8配置环境变量

    1. 准备好jdk安装文件,选择地址,假设使用默认地址 2. 安装jdk,此时跳出安装 jre 的地址 3. 等待安装 4.找到安装路径,选择jdk 5. 复制文件夹下的bin 6. 点击我的电脑右键 ...

  5. MySQL出现Waiting for table metadata lock的场景浅析

    MySQL版本为5.6.12. 在进行alter table操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的 ...

  6. PgSQL基础之 pgsql与mysql的简单区别

    1.支持的booloan类型的值 mysql并不支持boolean类型,即便当我们创建了boolean的字段属性之后,mysql会自动将其转化为tinyint(1)类型.当插入“true”的时候,其值 ...

  7. 陈远波(java)--Git 入门

    本章节讲解思路:1.在Git hup官网注册一个Git账号:2.下载git bash管理工具  3.在git bash上绑定GitHup账号密码: 一:进入GitHup官网:https://githu ...

  8. IDEA中的替换功能(替换代码中的变量名很好用哦)

    刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰式的命名规则.一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F( ...

  9. arcgis pro2.3教程与问题集持续更新(一)

    Arcgis pro 2.3是64位的不支持mdb 数据库,因为微软没有开放Access64的接口,所以不能支持个人地理数据库.mdb(Microsoft Database). arcgis pro ...

  10. GitKraken 团队项目使用教程

    前期准备:刚下载好要配置些东西,这些跟着教程走就好了,现在主要是讲团队项目的使用,创建分支 和Fork项目到个人仓库,请参考这篇博客的前两个点 1.将项目克隆到本地 打开GitKraken 点击Fil ...