开源分布式版本控制系统-Git-有效高速处理项目版本管理

本章内容从了解Git到熟练使用Git,最短的时间学会使用Git

目录

一.了解Git-我们为什么要学习Git

二.深入了解Git

三.基本Git工作流程

四.获取Git仓库

五.检查文件状态 

六.提交更新

七.修改文件

八.撤销修改

九.取消暂存文件&跳过暂存区

十.移除文件

十一.查看提交历史&回退到指定版本

十二.Git中的注释——忽略文件


一.了解Git-我们为什么要学习Git

随着时代的前进,无论任何方面都不断的更新迭代,越来越方便安全,说到如日中天的版本控制系统Git,那不得不说一下之前的传统版本控制系统,最早之前的文件版本需要我们去手动的维护,操作麻烦,每次都需要去复制、粘贴、重命名;命名也是不规范的,我们没有办法通过文件名来了解做了那些增删改查;如果硬盘故障或误操作删除文件,想要找回来可是非常的麻烦;抛开这些都不说,在我们团队开发协作时,需要手动的合并每一个人对项目文件的修改,麻烦不说还极易出错

所以针对这些问题,推出了版本控制软件

它可以用来记录文件的修改,方便之后查阅特定版本修订情况,从手动管理文件版本到软件管理文件版本,相比之前的文件版本操作更加的便捷,不容易丢失数据,团队合作方便,可以回到之前某个时间点的状态,易于对比细节修改,以此来更快速的找出BUG所在

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第1张图片

版本控制系统也有各色各样的,大体分为三类:

本地版本控制系统:使用软件来记录项目文件的不同版本,可以降低出错率,节省时间;但是还不够,既然是本地,那么就是单机运行,不能进行多人协同开发;并且当版本数据库故障的话,所有的历史更新记录都会丢失

集中化版本控制系统:它基于服务器、客户端运行,在客户端只保存最新的项目版本,服务器可以保存项目文件所有的更新记录,既然是基于服务器客户端运行的,那么它就可以进行联网多人协作开发,相比来说已经很不错了,但是还有些缺点,它不支持离线版本的提交更新,当中心服务器崩塌之后,所有人都无法正常工作,版本数据库故障,所有的历史更新记录还是会丢失,所以性能方面还是比较堪忧的

分布式版本控制系统:分布式版本控制系统可以说是较完美的解决了以上问题,既可以多人协作开发,性能也很强;它也是基于服务器、客户端运行,但是在客户端保存了服务器上的完整备份,在服务器上也保存了所有的更新数据,他有非常突出的俩优点:当我们网络断开或没有网络时,它可以实现离线本地提交版本的更新;当多人开发时,如果服务器故障的话,还可以从任意一个参与协作的客户端上的备份来恢复数据,我们本章所学习的Git就是一个分布式的版本控制系统


二.深入了解Git

我们上面提到了Git就是一个分布式的版本控制系统,也是目前最流行使用人数最多的版本控制系统,可以快速高效率的处理任何项目版本,当我们对Git的要求越多,越能体现出来它的高性能以及高可用性

它有俩个显著特点:

可以直接记录快照,不用像SVN那样进行差异化的比较

还有一个特点是几乎所有的操作都在本地执行

我们来解释一下差异化比较与记录快照:

像SVN这样的传统版本控制系统是基于差异化的版本控制,它们所存储的是一组基本文件和每个文件随时间逐步积累的差异,这样虽然可以节省磁盘的空间,但是较为耗时,每一次切换版本时都需要在基本文件的基础上应用每一个差异,从而生成目标版本对应的文件

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第2张图片 

我们再来对比看一下记录快照:

以Git为例,快照是在原有的文件版本基础上从新生成一份新的文件,就和备份一样,如果文件没有修改,那么Git不再重新存储文件,只是保留了一个链接指向之前的文件,大大提升了效率,在版本切换变快的同时占用的磁盘空间大了:

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第3张图片

永远也没有最好的软件,不过一直都有更好的软件

我们接着来说Git第二大特点:在本地执行的操作

近乎所有的操作都会在本地来进行,也就是说断网之后依旧可以在本地对项目进行版本管理,在游乐网络之后再把本地修改的记录同步到云端的服务器就可以了

因为这个操作机制,Git必然会有存放这些无网络时的项目修改记录或版本管理

那么就引出了Git的三个区域:

分别为:工作区---->暂存区--->Git云端仓库 

他们分别相对应了三种Git状态:已修改(modifed)---->已暂存(staged)--->已提交(committed) 

好了,现在我们正式进入Git的学习


三.基本Git工作流程

Git工作流程分为三步:

第一你需要在工作区修改文件

第二将你想要下次提交的更改进行缓存

第三你需要提交更新到云端,找到暂存区的文件将快照永久性

不过这都是后话了,我们应该先安装上Git:

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第4张图片

 从网上或者我们电脑自带的软件商城下载好Git

安装过程无需配置,一直下一步就好(如果不想安装在C盘,要注意选择路径)

2.鼠标右键打开菜单栏,点击Git Bash Here

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第5张图片

 我们在环境中输入:

git config --global user.name "你的名字(用户名)"
git config --global user.email "你的邮箱地址"

因为使用--global选项,我们之后不需要再次声明即可永久生效

我们的全局配置文件就会被放到C盘中的用户文件夹下的.gitconfig文件中

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第6张图片

 接下来我们可以检查一下配置信息,我们可以直接点击文件用记事本打开,或者运行终端命令:

git config --list --global
#查看所有的全局配置项


git config user.name
#查看指定全局配置

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第7张图片

如果可以看到自己配置的信息,那么就证明全局配置成功,我们就可以进行下一步了

基本操作: 退出:exit                 清空内容:clear

 如果我们什么地方不明白的话,我们可以寻求Git的帮助:

git help
#无需联网获取帮助文档

git help config
#打开浏览器中的Git帮助手册

git config -h
#简洁版帮助手册

我们输入指令跳转到浏览器来查看文档:

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第8张图片

 基本的操作完成,我们接下来执行创建库等


四.获取Git仓库

获取Git仓库有俩种方式或者说来源:

我们可以从其他服务器克隆一个已存在的仓库

我们可以将没有进行版本控制的本地目录转换为Git仓库

我们这里就自己来创建一个本地目录来转换为Git仓库来作为示例:

1.我们首先在本地的任何一个地方创建一个文件夹作为仓库

2.在刚创建好的文件夹中右键点击Git Bash Here

3.输入命令

git init

我们就把当前这个文件夹转换为了Git仓库,这是我们就会看到仓库中有一个名为.git的目录(因为这个目录是隐藏目录,如果没有显示,那么我们取消隐藏就可以看到了),当前这个.git目录就是当前项目目录的Git仓库,里面有初始化文件,非常重要,这时我们就可以将html,js,css等等文件放到项目目录下(就是你自己创建好的那个大文件夹)

那这样就算把我们的网页文件放到Git仓库里了吗?不,并不是,这才刚刚开始[狗头]

现在我们的项目文件处于未被跟踪的状态,是不被Git所管理的,我们还需要暂存,提交等,那么我们就必须了解在工作区文件的几种状态:

1.我们没有做任何操作时,就像现在,文件处于未被跟踪的状态

如果我们做了相应的操作,那么就会出现下面三种状态:

已被Git管理:

2.未修改:工作区中的文件内容和Git仓库中文件内容保持一致

3.已修改:工作区中的文件内容和Git仓库中文件内容不一致

4.未暂存:工作区中被修改的文件已被放在暂存区,等待保存到Git仓库中

工作区的文件处于未修改的状态是我们操作完毕最终的结果

如果想要执行这些操作,将我们的文件真正的提交到Git仓库中,那么我们现在需要知道文件处于什么状态


五.检查文件状态 

 我们可以使用下面的指令来查看文件处于什么样的状态:

git status -s

#或者

git status --short

比如我现在在仓库中创建了一个新的LESS文件,我还没有添加到暂存区,现在我们使用上面的查询语法,来查询我们less文件所处的状态: 

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第9张图片

 开源分布式版本控制系统-Git-有效高速处理项目版本管理_第10张图片

 他显示了??文件名,这样就对了,因为这是我刚创建的一个文件,还没有进行任何的操作

我们现在知道了该文件所处的状态,那么就可以进行跟踪该文件了

git add index.less
#跟踪指定文件添加到Git中管理

git add .
#跟踪所有未管理的文件

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第11张图片

 我们将文件跟踪之后,再次查询发现显示A文件名(表示暂存),这样就正确了(我第一次查询错了,少写了一个-忽略忽略[狗头]

成功跟踪之后,我们就可以提交更新了


六.提交更新

现在我们暂存区中有一个待提交文件index.less,我们可以使用如下指令来将该文件提交到Git仓库中进行保存

git commit
#提交更新

git commit -m "我新建了一个index.less文件"
#提交更新并添加本次的提交消息

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第12张图片

 提交之后我们再查询一遍,发现没有待提交的文件了,我们已经完成了Git的前期操作了


七.修改文件

修改文件不用多说,我们再VSCode或者其他编辑器中修改文件就好,修改完之后,我们发现我们需要重新暂存(git add),然后再次提交更新(git commit)

在这里我们不做过多的演示,使用之前阐述到的指令,就可以完成该操作了

我们主要普及一下git add这个命令的三个作用:

1.可以使用它开始跟踪文件

2.可以使用它将已跟踪并已修改的文件放到暂存区

3.把有冲突的文件标记为已解决状态


八.撤销修改

完了,我们发现刚才改错了,我们想要撤销重新修改,那该怎么撤销呢?

首先我们要知道撤销的工作原理,理解之后我们再利用命令来撤销:

其实撤销就是把工作区的对应文件的修改还原成仓库中所保存的版本,所有的修改会丢失,无法恢复,简单说也就是将Git仓库中保存的文件覆盖工作区的指定文件

只可以撤销工作区的,如果已经保存到Git仓库里面的话,那没办法了,完蛋了

git checkout -- index.less

所以大家一定要谨慎一点,不要像我一样冒失


九.取消暂存文件&跳过暂存区

我们如果有文件在暂存区中,我们想要移出来,那么该怎么做呢?

*注意:取消暂存文件只是放回了工作区,并不是删除了

git reset HEAD 要移除的文件名称


git reset HEAD .
#移除全部暂存区文件

 接下来讲述一个特别方便得功能,也是我们在工作中常用到的功能:

跳过暂存区:我们通过之前的操作知道我们得操作流程为:工作区-->暂存区-->Git仓库

跳过暂存区就是跳过暂存这个阶段,直接一条指令就将已跟踪文件提交到Git仓库进行管理,其实本质还是执行了暂存这个操作,只不过是在一条指令上都执行了:

git commit -a -m "对文件的描述"

十.移除文件

git rm -f index.less
#从Git仓库和工作区同时移除该文件


git rm --cached index.less
#只从Git仓库中移除该文件,但保留工作区的对应文件

十一.查看提交历史&回退到指定版本

如果我们希望去回顾项目的提交历史,我们可以使用下面的指令:

git log
#按时间先后顺序列出所有的提交历史,最近的提交会排在最上面

git log -6
#只显示最新的六条提交历史,数字按需填写

git log -2 --pretty=oneline
#在一行上显示最近俩条提交历史的信息

git log -2 --pretty=format:"%h | %an | %ar | %s"
#在一行上显示最近俩条提交历史的信息,并且自定义输出内容与格式


#解释:
#%h:提交的简写哈希值
#%an:作者名称
#%ar:作者修订日期(按照多久以前的格式显示)
#%s:提交说明

接下来我们学习怎么回退到指定的旧项目版本:

git log --pretty=oneline
#首先我们在一行上显示所有提交信息,查看到我们想要回退到的那个版本ID

git reset --hard 
#根据指定的提交ID回退到指定版本

git reflog --pretty=oneline
#在旧版本中查看操作历史

git reset --hard 
#再次根据最新的提交ID,跳转到最新版本


开源分布式版本控制系统-Git-有效高速处理项目版本管理_第13张图片

返回数据的前面的号码就是指定版本的ID值,我们复制ID值粘贴

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第14张图片 执行成功,回到了指定版本

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第15张图片

在旧版本中查看我们的历史操作,没有问题

跳转到 最新版本


十二.Git中的注释——忽略文件

我们一定有些文件是不想纳入或者是无需纳入Git管理,但是也不希望它总是出现在未跟踪文件列表,不好看也不方便操作,这时,我们可以在项目文件夹中手动创建一个名为:.gitignore的配置文件,然后列出要忽略的文件的匹配模式

总结出以下几点格式规范:

#开头为注释

/结尾为目录

/开头防止递归

!开头表示取反

 我们也可以使用glob模式(简化版正则表达式)进行文件和文件夹的匹配:

例如:

*:零个或者多个任意字符

[bbq]:匹配任意一个列在方括号内的字符

?:只匹配一个任意字符

[0-9]:匹配0到9(表示匹配的范围)

**:表示匹配任意中间目录(eg:a/**/z     可以匹配:a/z ; a/b/c/z ; a/d/k/z...)

 我们来做个例子实践并巩固一下:

#忽略所有的.bbq文件
*.bbq

#你在前面忽略了所有.bbq文件,也不能忽略lib目录下的.bbq文件
!lib.bbq

#只忽略当前目录下的giao文件,不忽略其他目录下的giao文件(防止递归)
/giao

#忽略任何目录下名为index的文件夹
index/

#忽略doc目录下的js文件,不忽略其他或者doc子目录中的js文件
doc/.js

#忽略doc目录下以及其所有子目录下的所有.ppt文件
doc/**/*.ppt

我在 .gitignore文件中只配置了忽略test目录下的所有文件:

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第16张图片

 所以这时我们的Git仓库中是没有test文件夹下的文件,并且我们使用git status -s查询时也不会提示有test文件夹中文件没有跟踪、暂存或者是提交

看-我的test文件夹里面是有文件的

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第17张图片

 但是当我要求列出所有文件时,却没有test下相关文件(被忽略了)

git ls-files
#列出Git仓库中所有文件,包括仅暂存但没有提交的文件

开源分布式版本控制系统-Git-有效高速处理项目版本管理_第18张图片

 

了解跟多Git知识,推荐给大家一个中文的文档参考指南:

Git 参考手册icon-default.png?t=M276http://gitref.justjavac.com/

下期我们阐述GitHub远程仓库的配置、Git的分支以及加密传输

你可能感兴趣的:(+,Git,前端,Git,GitHub,仓库)