目录
一、Git的介绍
(一)Git的背景
时间回到 2002 年,Linux 内核项目当时使用的版本控制工具是 BitKeeper,这是一款商业软件,开发者需要免费使用许可。
到了 2005 年,BitKeeper 收回了 Linux 社区的免费使用权,这直接导致整个 Linux 内核项目面临瘫痪风险。Linus Torvalds(Linux 之父)一气之下,决定自己开发一款版本控制工具,这就是 Git。
Linux 给自己定了几个硬性目标:
1.速度快
2.设计简单
3.支持非线性开发(海量分支)
4.完全分布式
5.高效处理大型项目(Linux 内核)
他只用了不到 1 个月,就写出了 Git 的核心原型,并在社区的迭代中快速完善。
(二)Git的概念
1.Git是什么?
Git是一款免费 、开源 的分布式版本控制系统。
专门用来管理代码版本、记录的修改、多人协同开发。
2.通俗理解
(1)相当于代码时光机
能记录每一次代码改动,写错了随时能回退到之前正确版本。
(2)代码备份神器
不怕删错、改崩、丢代码。
(3)团队协作工具
多人写同一个项目,互不干扰,轻松合并代码。
(三)Git的特点
1.分布式
(1)集中式vs分布式
集中式
①什么是集中式?
集中化的版本控制系统 (Centralized Version Control Systems,简称CVCS)。
都有一个单一的集中管理的服务器存着所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来,这已成为版本控制系统的标准做法。见下图

②缺点
缺点也显而易见,中央服务器的单点故障 。如果这个服务器宕机 一个小时,那么这一个小时里我们无论是取出文件或者是提交更新文件都是无法做到的,也就没法协同工作。
更严重的是没有及时备份会导致数据丢失!!运气好的可以在数据丢失前取出文件,运气不好的文件丢了也就真不好找回来了。你不能保证所有数据都已经有人提前完整提取出来了,本地版本控制系统也有这样的问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险!
分布式
①什么是分布式?
分布式版本控制系统 (DIstributed Version Control System,简称DVCS)会把服务器上的代码仓库完整地镜像下来。这样每个人的电脑上都有一份完整的服务器代码仓库的镜像。任何一处协同工作用的服务器发生故障,事后都可以用个人电脑上的镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。我们可以看到电脑A与电脑B与服务器上的版本内容完全一致。如下图。

2.版本存储
集中式Git保存前后变化的差异数据,Git更像是把变化的文件作快照后,记录在一个微型文件系统中。每次提交更新时,它会纵览以便所有文件的信息并再作一次快照,然后保存一个指向这次快照的索引,比如一个可供回溯的版本号。为提高性能,文件没有变化的时候Git不会再次保存,只对上次保存的快照作一链接。
比如三个文件,ABC。
我只改变A文件提交的时候提交改后的A,未改的B,未改的C。
我更改A、B,提交的时候提交改后的A、B,未改的C。
(四)Git仓库的概念和工作流程
1.Git仓库是什么?
Git仓库(Repository)是Git用来完整保存项目所有文件、本历史、分支配置的地方,核心的隐藏文件夹.git
分为两类:
·本地仓库:存在自己电脑上的仓库,包含完整的版本历史,支持离线提交、分支操作。
·远程仓库:托管在云服务器的仓库(比如GitHub/Gitee),用于代码备份、团队协作。
2.Git仓库的核心结构
(1)工作区 :就是平时写代码的项目文件夹,里面存放着正在编辑的文件,是直接能看到和修改的部分。
(2)暂存区:
一个临时区域,用来存放准备提交的修改,相当于"提交前的中转站"。
·执行git add命令后,文件会被加入暂存区
·暂存区的文件可以就批量一次性提交到本地仓库
(3)本地仓库:
.git文件夹内的核心区域,永久保存项目的所有提交版本,分支记录、配置信息。
·执行git commit命令后,暂存区的文件会被正式提交到这里,生成一个版本快照
·本地仓库包含一个默认的主分支和所有历史提交记录
二、Git的入门
(一)Git的安装
1.去Git官网下载
https://git-scm.com/
https://git-scm.com/

点进Install for Windows之后,下载适合自己电脑的版本


看见Completing the Git Setup Wizard就说明安装成功了!!

(二)Git的命令
1.创建版本库
创建一个版本库很简单,先在某一个盘的目录下创建一个新的文件夹
·比如我在D盘创建一个文件夹叫做testGit
·在文件夹内部鼠标右键点击Git Bash Here

我们可以通过pwd命令来显示当前的目录

2.配置相关
全局:
·git config --global user.name "你的名字" #设置用户名
·git config --global user.email "你的邮箱" #设置邮箱
·git config --global --list #查看所有配置
局部:·git config --local user.name "你的名字" #设置用户名
·git config --local user.name "你的邮箱" #设置邮箱
·git config --local --list #查看所有配置
比如我现在在testGit目录下设置这两个属性再查看,就可看见自己配置的姓名和邮箱

3.初始化/克隆项目
·git init #初始化本地仓库(第一次用)
·git clone 地址 #从GitHub/Gitee下载项目

可以看见现在testGit文件夹没有东西的,我们需给它初始化,让Git管理,监控着它的一举一动

再观察文件夹就会发现多出了一个.git文件夹(这个文件夹是隐藏的,需要手动在显示里边打开才能够看到)


4.查看状态/日志
·git status #查看文件修改状态(红=未添加,绿=已添加)
·git log #查看提交历史
·git reflog#查看提交历史,包括你删除过的

这是下边添加之后查看的日志

·git log --oneline #简洁版查看历史

5.提交代码&创建文件
·vi 文件 #创建文件
·esc+:q! #不保存退出
·esc+:wq #保存并退出

回车之后就会发现文件夹里已经有了这个文件


用git status发现test1.txt是红色的,说明还在工作区,它并没有被添加到临时区
·git add 文件名 #添加单个文件

这时我们add test1.txt之后再查看状态

会发现文件test1.txt已经绿色了,说明到了临时区了
·git add. #添加所有修改(常用)

现在我们创建到五个test文件,查看状态

一个个add提交很麻烦,我们可以add .就全提交到临时区了

·git commit -m "备注" #提交到本地仓库
现在用git commit -m 就能把他们都提交到本地仓库了

此时再查看状态就会发现什么都没有了

6.回退/撤销
现在先再提交一个test6文件,操作实现到提交之前的状态

·git reset --hard HEAD #撤销所有修改,回到上一次提交
·git reset --hard HEAD^ #撤销所有修改,回到上一次提交
·git reset --hard HEAD^^ #撤销所有修改,回到上上次提交

·git reset --hard 版本号 #撤销到上一个版本号
回退到上上个版本号9372aaf:

撤销到4226dd8版本(有test6.txt):

·git checkout -- 文件名 #撤销单个文件的修改
7.删除文件
·git rm 文件 #彻底从版本库中删掉此文件

·git reset HEAD 文件 #进入临时区的文件退回工作区

(三)Git的配置信息Config
1.config概述
在git中,我们常用git config命令来配置git的配置文件,git配置级别主要有以下3类:
(1)仓库级别 local 【最高优先级】
(2)用户级别 global 【第二优先级】
(3)系统级别 system 【最低优先级】
这么做有什么作用呢?
就比如说一群人用这台电脑工作,协同工作的时候更新了代码。这时候就需要仓库级别的优先级设置你的姓名和邮箱以便找出是谁更新的代码出了问题。
再比如这台电脑就你一个人使用,来更新代码,就不需要仓库级别的配置了,可以使用用户级别的配置。
我们通常用不到系统级别的配置。
2.演示
依旧用我们的testGit文件夹,我们先把三个优先级全配置了
仓库级别配置:老大
用户级别配置:老二
系统级别配置:老三

配置好了之后,我们先来提交一次数据
由于优先级的存在,可见现在是仓库的优先级最高,显示的是老大

我们尝试把仓库的信息都删掉
仓库的配置信息在哪里?------就在这个git管理目录下.git的config里边

我们通常不会动它,但是为了演示我们先删掉信息。

选中之后删除,再提交一次试试

一样的,我们再把老二(用户级别)的信息删掉------在c盘的用户文件夹里边的.gitconfig文件下

删除之后再来提交一次

老三的信息在git的安装目录下的etc的gitconfig文件里边
