Git基本概念

此系列是本人的Git学习笔记,完整文档可下载,详见:https://github.com/BRabbitFan/NoteGit

Git

Git是一个免费开源的 分布式 版本控制 系统.

版本控制

记录工程文件的变化 , 以便日后的查阅修订选择.

版本控制系统的分类

  1. 集中化 版本控制系统
    用一个中央服务器存储管理工程文件 . 各开发人员从服务器下载其所需的代码段 , 工作完成后向服务器提交新代码. 管理员通过服务器管理不同人员的权限 . 集中化版本控制系统存储不同版本的差异 .
    • 优点 : 系统的维护相对轻松
    • 缺点 : 服务器的单点故障将导致整个团队无法工作
    • 典型 : SVN , CVS , Perforce
  2. 分布式 版本控制系统
    客户端并不只是提取最新版本的文件快照 , 而是把代码仓库完整地镜像下来 . 同时通过压缩算法减小对存储空间的要求 . 每个客户端都相当于一个服务器 . 分布式版本管理系统存储不同版本的索引 .
    • 优点 : 不用担心中央服务器宕机的问题
    • 缺点 : 每个客户端存储空间消耗相对大 (使用压缩算法之后只大了一点点)
    • 典型 : Git , BitKeeper

Git的本地结构与代码托管中心

Git的本机结构分为三个区域

  1. 工作区 - 当前开发的工程文件
    通过 git add 命令将文件提交至暂存区
  2. 暂存区 - 将要提交还未提交的代码
    通过 git commit 命令将文件提交至本地库
  3. 本地库 - 历史版本的信息

本地库与远程库

本地库用于每人的直接开发工作 , 可以将本地库的新内容推送至远程库 , 也可以总远程库拉取新内容至本地库 .
远程库创建于代码托管中心 , 接受所有加入团队的人进行推送和拉取内容 .

团队内部协作基本流程

  1. 项目经理创建本地库 .
  2. 项目经理使用push操作将本地库内容推送至远程库 .
  3. 开发人员使用clone操作将远程库的内容下载到本地 . (自动创建本地库)
  4. 开发人员使用push操作加入团队 , 使用push操作提交新内容至远程库 .
  5. 项目经理 , 开发人员使用pull操作从远程库拉取新内容 .

跨团队协作基本流程

  1. A团队创建本地库 , 并推送至远程库 .
  2. B团队使用fork操作将A创建的远程库复制到自己的远程库中 .
  3. 双方的开发人员使用clone push pull等操作在己方的远程库下开发 .
  4. B团队使用pull request操作发出拉取请求 , A团队审核后进行merge合并操作 , 将内容合并到A的远程库中 .

代码托管中心

代码托管中心的分类

  • 局域网 : 可使用GitLab服务器作为代码托管中心 , GitLab服务器需要自己搭建
  • 公网 : 可使用GitHub , Gitee作为代码托管中心 , 不需要自己搭建服务器

分支

在版本控制的过程中 , 可以使用多条线同时推进多个任务 . 多条线指的就是多个分支 .
分支可以继续生成分支 , 多个分支也可以合并 .
当本地库创建的时 , 自动创建一个主分支 master .

创建/合并分支的时机

  1. 开发独立新功能 :
    当开发一个新的独立功能时 , 可以开辟一个新的分支 .
    当这个功能开发完成后 , 可以将该分支的最终版本合并入主分支 .
  2. 热修复(hot-fix) :
    当系统在持续运行中发现待修复的bug时(如web服务器) , 可以开辟一个新分支 .
    当在新分支中bug修正完毕后 , 将该分支的最终版本合并入主分支 .

分支的优势 :

  • 多个分支并行开发 , 互不影响 , 提高效率 .
  • 一个分支的功能开发失败 , 直接删除该分支即可 , 不会影响其他部分 .