Git入门教程

*目录*

Git概述

一、Git简介

二、Git主要特点及其优势

三、SVN与Git的优缺点对比

四、Git、GitHub与 GitLab的联系和区别

五、Git基本概念

5.1工作区(Working Directory)

5.2本地版本库(Local Repository)

5.4远程版本库(Remote Repository)

5.5分支(Branch)

5.6标签(Tag)

5.7头指针(HEAD)

六、Git基本操作

七、Git高阶用法

一、Git简介

Git 是一个去中心化的版本控制系统,用于记录文件不同版本的内容变化。去中心化的版本控制系统没有中央服务器的概念,客户端提取的不只是最新的文件,而是把代码仓库完整地镜像下来,相当于每个人的电脑都是一个完整的版本库,既包含代码库还有历史库,在本地就可以查看版本历史,不像集中式版本控制系统,每次对比、还原‘或提交代码都必须连接到中央仓库。

Git入门教程_第1张图片

图 1 传统的集中式版本控制系统

Git入门教程_第2张图片

图 2 分布式版本控制系统(设备内部)

Git入门教程_第3张图片

图 3 分布式版本控制系统(设备之间)

二、Git主要特点及其优势

特点一:去中心化、消除单点故障

去中心化使git客户端两两之间都可以进行代码的交互。假如有多位开发者共同开发一个项目,在开发过程中需要对代码进行一些合并和验证, 开发者可以不推送至远程仓库,直接在本地拉取对方的代码。比如,Alice要拉取Bob仓库的代码,Alice 只要在本地库添加一个指向 Bob 仓库的远程 Git 分支就可以了,当某个人有新的代码更改时,也可以直接push给对方,灵活高效。

去中心化消除了中央服务器单点故障的问题。假如远程服务器出了故障,可以利用任意一个本地仓库来恢复远程仓库。其实不止是服务器,任何一处协同工作的客户端仓库出现故障,都可以用另外一个镜像出来的本地仓库恢复。

特点二:直接记录快照,而非差异比较

Git不会将数据存储为一系列的版本差异,而是存储一系列的快照,每个快照都包含了完整的数据。Git快照的执行过程是这样的:

首先,git会读取工作空间的所有数据,进行数据预存,每个文件是分为不同的data block进行存储的,快照可以简单地理解为对这些data block编号的记录,当你对一个文件做出修改时,未改动的地方仍然沿用旧的data block编号,而新的改动则存储到新的data block。每一次提交,Git都会对提交的文件做一次快照,并基于文件名和目录结构计算哈希,生成一个40位十六进制字符串的版本号。

特点三:创建分支简单快捷

Git 创建一个分支,本质上是新增一个Git引用(类似于指针),指向某个提交记录。分支的量级非常轻,与项目复杂度无关,可以在几毫秒的时间内完成,效率非常高,而且占用的存储资源很少。Svn创建分支需要目录拷贝,对于大型项目来说,既耗费时间,又占用内存。

特点四:Git保证数据的完整性

Git 中所有数据在存储前都计算校验和,然后以校验和来引用。这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 若在传送过程中丢失信息或损坏文件,Git 立刻就能发现。
无论执行任何 Git 操作,几乎都是往 Git 数据库中增加数据,当你删除一个文件后,文件原来所占的磁盘空间并不是被清空,而是被文件系统标记为“已废弃,可修改”的状态,所以数据是可以恢复的。也就是说,一旦提交快照到 Git 中,就难以再丢失数据,特别是当你定期推送数据到其它仓库的话。

三、SVN与Git的优缺点对比

优点 缺点
SVN 1、具有集中式服务器,管理方便。2、逻辑明确,符合常规的思维习惯,易上手。3、适合人数不多的项目开发。 1、服务器压力大,容易出现单点故障。2、必须连接到服务器,才能提交,还原,对比等,依赖于网络。3、打tag打分支需要目录拷贝,耗时较长,不适合大规模项目。
GIT 1、分布式开发,可以端到端管理。2、服务器压力相对小,消除了单点故障。3、良好的分支机制,打tag打分支速度快、开发灵活。4、支持离线还原和对比,不依赖网络,管理代码成本低。 1、概念相对复杂,学习使用门槛略高。

四、Git、GitHub与 GitLab的联系和区别

在Git的版本控制系统下,每个人的电脑都是一个完整的版本库,相互之间可以直接拉取或推送代码。但是,当协同工作的人很多,又不在一个局域网里的时候,这种P2P的代码共享方式就会显得有些混乱,不利于管理。这种情况下,Git的解决方案是用一台电脑作为集中的版本库,大家把新代码都push到上面去,需要的时候再pull到自己电脑上。

GitHub 和 GitLab 都是基于 Git实现的、 提供web服务的远程代码仓库,为开发团队提供了存储、分享和发布项目的平台。

  • GitHub 作为开源代码库,拥有超过 900 万的开发者用户,是目前最火的开源项目托管平台,GitHub 同时提供公共仓库和私有仓库,如果使用私有仓库,可能需要付费,最近听说好像不用付费了,但是用别人的服务器肯定不如用自己的安心。

  • GitLab对于企业开发者更加友好,它提供了一个远程代码仓库的软件安装包,基于它可以搭建一个免费的私有仓库,并设置仓库权限,使开发团队对他们的代码仓库拥有更多的控制,对于企业来讲,搭建自己的GitLab服务器,无疑是一种更好的选择。

五、Git基本概念

5.1工作区(Working Directory)

就是我们在电脑里能看到的工作目录。

5.2 本地版本库(Local Repository )

在创建一个git版本库之后,工作区会有一个隐藏目录 .git,其中包含了 Git 本地版本库的所有内容。

5.3 暂存区(index/stage)

在.git文件夹下有很多文件,其中有一个index文件,也称为暂存区( stage),它是一个临时保存文件修改的地方。

在Git中,文件的状态大概分为三种:已修改(modified)、已暂存(staged)、已提交(committed)。

  • 已修改:当工作目录中的部分文件被修改了,Git会自动将修改后的文件状态标为已修改。
  • 已暂存:通过add命令,可以将工作目录中修改的文件提交到暂存区,等候被commit。
  • 已提交:通过commit命令,将暂存区文件提交至Git本地版本库永久保存。

5.4 远程版本库(Remote Repository)

远程版本库指的是 Git 服务器上的版本库,也称为远程仓库,通常用Origin来表示。

工作区(workspase)、暂存区(Index)、本地仓库(Repository)、远程仓库(Remote)之间的 Git 操作流程如下图所示:

Git入门教程_第4张图片

5.5 分支(Branch)

当在某个节点创建一个分支,并不会把该节点对应的代码复制一份出来,只是将新分支指向该节点,因此可以很大程度减少空间上的开销。也就是说,分支本质上就是引用而已,量级非常轻。

5.6 头指针(HEAD)

HEAD指针可以指向任意一个提交节点,并且指向的节点始终为当前工作目录,换句话说,当前工作目录就是HEAD指向的节点。

HEAD存储在.git/refs/heads目录下,有多少个分支,就有多少个同名的HEAD指针。可以手动指定HEAD指向的提交对象,使其指向任意一个提交版本,如下图,使用git checkout 命令将HEAD指向commit-2提交对象。
Git入门教程_第5张图片

5.7 标签(Tag)

和HEAD类似,Tags也是一个指针,指向某个特定的提交对象,用于标识特定的版本。标签名通常是标记发布版本的名称或版本号。

与HEAD不同的是,Tags指向的提交对象是固定的,不可修改,一般用于归档。Tags存储在.git/refs/tags目录下,使用git tag可查看所有标签。

六、Git基本操作

Git 的操作命令有很多,最常用的一些基本操作如下:

· git init:初始化版本库

· git clone:克隆版本库

· git add:添加文件到暂存区

· git commit:提交文件到本地版本库

· git pull:拉取远程仓库,与本地工作区合并

· git push:推送到远程仓库

· git branch [-d]:查看、创建、删除分支

· git checkout / switch:切换分支

· git merge:将其它分支合并到当前分支

· git status:查看文件状态

· git log:查看提交日志

· git tag [-a/-d]:查看、创建、删除标签

七、Git高阶玩法

git cherry-pick:选择某几个commit节点进行合并

git reset :将当前的分支重置到指定的commit节点

git rebase:合并分支,并且改变分支基点,使提交历史更加线性

git revert:撤销某次操作

git reflog:查看所有分支的所有操作记录

git stash:在git 的栈中保存当前修改或删除的工作进度

……

八、Git学习网站

https://learngitbranching.js.org/?locale=zh_CN:以动画的方式展现git操作。

https://backlog.com/git-tutorial/cn/ :git入门图文教程。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a7af7db9c1a64052be3b68b641902fa1.png#pic_center
Git入门教程_第6张图片
关于git的更多技术干货,扫描二维码私信领取

你可能感兴趣的:(高效开发,版本管理)