Git实战教程[一]——Git概述

前言

本教程针对实战操作,一切内容从实操角度出发,对底层命令的使用和过深的概念不作阐述。本教程主要基于TortoiseGit等图形界面工具的使用进行讲解,但是操作是互通的,理解了概念后换成任一工具都可以。建议在了解应用层面后也了解一下Git的底层操作,可参考Git经典教程《Git教程——廖雪峰的官方网站》

什么是Git

一个版本控制系统,特点是免费、开源、高效、分布式。

Git与SVN

  • Git相对SVN的优点
    Git的优势在于能够非常灵活的基于指针创建分支,提高项目版本的灵活性。SVN是基于文件复制创建分支,导致分支功能效率低下、非常鸡肋,所以SVN的开发操作一般都在主线上,版本管理相对限制。
  • SVN相对Git的优点
    SVN天生就是集中式版本管理系统,对权限控制的支持达到极致,可以根据项目组要求进行文件级别的各种权限限制;Git倡导的是开源精神,所以Git对权限管理的支持不高,虽然可以通过例如GitLab等服务配置权限,但也只能配置控制到分支级别。

Git的重要概念

  • Git的分布式与集中式
    Git是基于分布式的版本管理系统,主要的思想是去中心化,意思是所有的机子都可以成为远程仓库,理论上是每个人都可以从最近的机子获取代码。但是Git的实际应用中主要还是基于集中式进行,通常会有一台服务器作为远程仓库,项目组的开发成员会从这个远程仓库上获取代码,而最后也是提交代码到这个远程仓库。
  • Git的本地仓库与远程仓库
    Git中会有本地仓库和远程仓库的概念,在这里我们简单的把本地仓库当作开发者的本地Git,而远程仓库就是上边提到的集中式的中心仓库,本地仓库要向远程仓库提交代码时是通过push操作实现的。
    补充:为什么只能是本地仓库向远程仓库(此处特指中心仓库)push,而不能反过来?Git是分布式的,理论上每个仓库都是平等一致的,中心仓库其实也是一个普通仓库。假设仓库A向另一个仓库B push文件时,建立的连接是基于ssh的,那么前提就要求仓库B必须保存了仓库A的SSH key,也就是仓库A要先创建SSH key,然后把SSH Key告诉了仓库B,在仓库B保存了仓库A的SSH key后A仓库才有权限把文件push到仓库B,基于这个原理我们就能够轻易的实现集中式的Git。
  • Git的分支
    Git的最强大之处就是以分支为主导的开发模式,本教程中是比较精简的模型,远程仓库主要有master和dev两条分支,为了实现热修复还有一条hotfix分支。开发的时候开发者需要习惯为每个开发任务分别创建分支,在新的分支上进行功能开发,开发完成后再合并到远程分支。

Master和Developer角色

本例中设定的角色只有Master和Developer角色。一般开发者都是Developer角色,拥有对dev、hotfix分支的所有权限,但不能操作master分支;而能够拥有版本发布权限的开发者则是Master角色,除了拥有dev分支的所有权限外,还拥有master分支的所有权限。

Git的常用功能

  • clone 从远程仓库下载项目到本地
  • pull 更新本地文件
  • create branch 创建分支
  • switch/checkout 切换分支
  • commit 修改内容提交到分支
  • push 把分支内容提交到远程仓库
  • merge 合并从其他分支push过来的内容
  • stash save 保存当前工作快照
  • stash pop 恢复工作快照

分支模型

QQ截图20170113131952_副本.png

分支模型的设计可参考《Git实战教程[附录一]——分支模型设计》


[目录]
[下一篇] Git实战教程[二]——环境搭建


发表评论