前言

在平时的开发中我们经常会出现,自己以前做的项目需要拿出来看看,但是在电脑上怎么找都找不到。也会出现自己写的项目上线了,但是觉得需要添加新功能,我们又不能让项目下线。需要在原有的代码上进行更新。既能存储线上版本,又能对目前的版本进行升级。下面然我们来看看版本控制器能为我们带来什么。

本系列文章:
1、前端工具与环境基础系列:node环境搭建(node安装、npm/cnpm & yarn/tyarn 缓存设置 与 镜像配置 )(二)
2、前端工具与环境基础系列:工具篇(VScode 好用插件!! 不定期更新)(一)


1、版本控制

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

无论是工作还是学习,或者是自己做笔记,都经历过这样一个阶段!我们就迫切需要一个版本控制工具!

2、常见的版本控制工具

我们学习的东西,一定是当下最流行的!

主流的版本控制器有如下这些:

  • Git
  • SVN(Subversion)
  • CVS(Concurrent Versions System)
  • VSS(Micorosoft Visual SourceSafe)
  • TFS(Team Foundation Server)
  • Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN

3、版本控制分类

集中式控制

集中式版本控制系统,代码仓库是集中存放在中央服务器上,你所有操作的都需要通过中央服务器才可以进行。
举例:

你在开始办公的时候,先***服务器上拉去自己需要完成需求的代码,从中央服务器拉去项目后,对拉去的项目进行编码,编码完成后需要把代码放到中央服务器上,以便于下次继续开发。

特点

  • 管理方便,逻辑明确,符合一般人思维习惯。
  • 易于管理,集中式服务器更能保证安全性。
  • 代码一致性非常高。
  • 适合开发人数不多的项目开发。

分布式控制

分布式管理与集中式恰好相反,每个人在本地都有一个自己的代码仓储,有需求直接写,写好了在上传到中央服务器上。

4、svn与git对比

1、 svn

svn是一种集中式的版本控制系统,版本库是集中存放在中央服务器上的,而干活的时候,用的都是自己的电脑,所以首先需要从中央服务器哪里得到最新的版本,然后干活,干完活后,需要把自己做完的活推送到中央服务器。集中式版本控制系统必须有互联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,网速慢的话,就会很慢。

集中式管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松的掌握每一个人的开发权限。

缺点:容错性差、服务器单点故障

2、git

GIT是一个分布式的版本控制系统,那么他就没有中央服务器,每一个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网,因为版本都在自己的电脑上。既然每个人的电脑都有一个版本库,那么多人如何协作呢?比如自己修改了A文件,别人也修改了A文件,这时,你们两个只需要把各自的修改推给对方,就可以互相看到对方修改的了

5、git操作指南

git工作流程

1、从远程仓库中克隆Git资源作为本地仓库

2、从本地checkout代码后进行代码修改

3、在提交前先将代码提交至暂存区

4、提交修改,提交至本地仓库,本地仓库中保存修改的各个历史版本

5、修改完成后,需要与团队成员共享代码,可以把代码oush到远程仓库

git工作流程图

git安装

git下载地址
这里不做过多的阐述,链接一篇文章搭建可以参考“git安装教程

使用git管理文件版本

安装好了git 大家可以在需要管理的代码根目录鼠标右键就会看到Git GHI(图形工具)和 Git Bash (命令行工具),普遍使用最多的是Git Bash。当然使用前提是你已经在这个文件夹创建了git本地仓库(本地仓库创建命令:git init
1、创建版本库

  • Git GHI(图形工具)
  • Git Bash (命令行工具)

git配置

查看配置

git config -l   // 查看所有配置
git config --global --list //查看全局配置 (用户自己配置的)
//配置用户名和邮箱(必须配置)
git config --global user.name '***'
git config --global user.email '***'


git config --system -list //查看系统配置 (安装的时候系统默认配置)

git基础指令

  • 创建全新的仓库
//创建一个全新的仓库
git init 
//克隆远程仓库
git clone + url
  • git的文件操作

    • 未跟踪状态:还有一提交的暂存区
    • 跟踪状态:
      • 未修改:文件内容与快照内容一致
      • 已修改:文件内容与快照内容不一致
    • 暂存状态:提交到暂存区的文件
    //查看状态
    git status
    

git指令

git branch 查看本地所有分支
git status 查看当前状态
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git commit -am “init” 提交并且加注释
git remote add origin git@192.168.1.119:ndshow
git push origin master 将文件给推到服务器上
git remote show origin 显示远程库origin里的资源
git push origin master:develop
git push origin master:hb-dev 将本地库与服务器上的库进行关联
git checkout --track origin/dev 切换到远程dev分支
git branch -D master develop 删除本地库develop
git checkout -b dev 建立一个新的本地分支dev
git merge origin/dev 将分支dev与当前分支进行合并
git checkout dev 切换到本地dev分支
git remote show 查看远程库
git add .
git rm 文件名(包括路径) 从git中删除指定文件
git clone git://github.com/schacon/grit.git 从服务器上将代码给拉下来
git config --list 看所有用户
git ls-files 看已经被提交的
git rm [file name] 删除一个文件
git commit -a 提交当前repos的所有的改变
git add [file name] 添加一个文件到git index
git commit -v 当你用-v参数的时候可以看commit的差异
git commit -m “This is the message describing the commit” 添加commit信息
git commit -a -a是代表add,把所有的change加到git index里然后再commit
git commit -a -v 一般提交命令
git log 看你commit的日志
git diff 查看尚未暂存的更新
git rm a.a 移除文件(从暂存区和工作区中删除)
git rm --cached a.a 移除文件(只从暂存区中删除)
git commit -m “remove” 移除文件(从Git中删除)
git rm -f a.a 强行移除修改后文件(从暂存区和工作区中删除)
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git stash push 将文件给push到一个临时空间中
git stash pop 将文件从临时空间pop下来
git remote add origin git@github.com:username/Hello-World.git
git push origin master 将本地项目给提交到服务器中
git pull 本地与服务器端同步
git push (远程仓库名) (分支名) 将本地分支推送到服务器上去。
git push origin serverfix:awesomebranch
git fetch 相当于是从远程获取最新版本到本地,不会自动merge
git commit -a -m “log_message” (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
git branch branch_0.1 master 从主分支master创建branch_0.1分支
git branch -m branch_0.1 branch_1.0 将branch_0.1重命名为branch_1.0
git checkout branch_1.0/master 切换到branch_1.0/master分支
du -hs
git branch 删除远程branch
git push origin :branch_remote_name
git branch -r -d branch_remote_name
初始化版本库,并提交到远程服务器端
mkdir WebApp
cd WebApp
git init 本地初始化
touch README
git add README 添加文件
git commit -m ‘first commit’
git remote add origin git@github.com:daixu/WebApp.git
增加一个远程服务器端
上面的命令会增加URL地址为’git@github.com:daixu/WebApp.git’,名称为origin的远程服务器库,以后提交代码的时候只需要使用 origin别名即可

是不是觉得上面的指令太多了看到脑瓜疼。下面我来总结以下常用的几个指令。

git init // 创建本地仓库
git add . //把所有,有变化的代码文件放入缓存区
git commit -“本次提交的描述” //把本地缓存区中的代码提交到本地仓库中。
git remote add origin + 你仓库的地址 //本地仓库与远程仓库建立链接通道。
git push //远程仓库与本地同步
git pull // 本地仓库与远程仓库同步


分支操作
git branch -a //查看所有分支
git branch ‘分支名’ //创建分支,但不跳转到该创建分支
git checkout '分支名‘ //跳转到对应分支
git checkout -b ’分支名‘ // 创建分支,并跳转到该分支

6、创建本地仓库并与远程仓库相关链接。

1、创建本地仓库
选择一个文件夹,鼠标右键选中git Bash,输入以下代码。

在本地初始化一个仓库
mkdir work
cd work
git init
git add .
git commit -m ‘add files’

完成上述操作,本地仓库已经建立好了。下面我们需要在gitee上创建一个远程(线上)仓库。
2、在gitee上创建仓库
在gitee上创建仓库的步骤这里不做叙述。
3、让本地仓库与远程仓库建立连接
在本地项目的文件夹上鼠标右键选择git Bash,输入以下内容即可。

git remote add origin +  //远程仓库地址
git pull origin master --allow-unrelated-histories
git push origin master 

7、SSH协议

什么是ssh?

SSH是(安全外壳协议)的缩写,由IEIF的网络小组所制定。SSH是目前较可靠,专门为远程登录会话贺其他网络服务提供安全性的协议。利用SSH协议可以有效的防止远程管理过程中的信息泄露

基于密钥的安全验证

使用ssh协议通讯时,推荐使用基于密钥的验证方式。你必须为自己创建一队密钥,并把公用密钥放在需求访问的服务器上。如果你需要链接到SSH服务器ss上,客户端软件就会向服务器发送请求,请求用你的密钥进行安全验证。服务器收到请求后,先在该服务器上你的主目录下寻找你的公用密钥,然后把他和你发送过来的公用密钥进行比较。如果两个密钥一致,服务器就会用公用密钥加密 ‘质询’ 并把它发送给客户端软件。客户端软件收到 ‘质询’ 之后就可以使用你的私人密钥解密再发她发送给服务器。

举例:你使用git上传代码到github,你的电脑创建一对密钥(公钥,私钥),在创建GitHub仓库的时候,会在设置中添加公钥。上传代码的时候,你的电脑会通过私钥加密数据,然后上传到GitHub服务器,又应为你的服务器上有你添加的公钥,服务器通过公钥解密数据然后存储到仓库中。同理你从GitHub服务器上拉去数据的时候,会对数据进行公钥加密,然后传输到客户端,客户端通过私钥解密数据,并存放到对应文件夹。(私钥加密公钥解密,公钥加密私钥解密)

ssh密钥生成

//进入 c:\user\Administrator\.ssh目录(有内容则说明已经有公钥了,可以删除从新生成,也是有直接使用)

//生成公钥
ssh-keygen
ssh-keygen -t rsa//使用一些加密算法

ssh密钥配置

同步到远程仓库

将本地git仓库的代码上传到远程仓库

git push origin master

出现分支合并的报错 使用

git pull --rebase origin master

分支管理

分支是什么概念?

假设一个大项目已经上线,但是过了一段时间发现需要增加新功能,那么久不能再当前项目上直接开发,需要创建新分支,在分支上进行开发、调试等操作,完成后将其合并在master主分支上面。

如果没有使用分***么整个产品的迭代周期会因为新功能的开发而被延长,更糟糕的是,如果在开发的过程中,如果由用户反馈说你的项目有一个致命的bug,不得不放在手头的开发工作修复bug,费时费力,可能面临崩溃。

git分支常用命令

//列出所有本地分支
git branch
//列出所有远程分支
git branch -r
//新建分支,单但依然停留在当前分支
git branch dev
//创建新分支,并切换到该分支
git checkout -b dev
//切换分支
git checkout dev
//合并制定分支到当前分支
git merge dev
//删除本地分支
git branch -d dev
//删除远程分支
git push orgin --delete dev
git branch -dr dev

实操:上传到gitee码云

方法一

适用于项目开始之前

1、gitee创建仓库

2、在项目中克隆仓库

git clone + ‘地址’

3、代码提交到接口

git add .

4、代码提交到本地仓库

git commit -m ‘提示信息’

5、将本地代码提交的远程仓库

git push + 地址

方法二

适用于项目完成或者完成一半

1、cd到你的项目目录

2、创建一个本地仓库

git init

3、将项目的所有文件添加到缓存中

git add .

4、将缓存中的文件Commit到git库

git commit -m “添加此次更新的内容备注”

5、将本地的库链接到远程仓库

git remote add origin + HTTPS链接

6、将本地git仓库的代码上传到远程仓库

git push origin master

7、出现分支合并的报错 使用

git pull --rebase origin master

查看commit记录

git log git reflog

回退版本 git reset --hard ***(版本号)

git push -f 强制推送


总结

学完这些相比你对版本控制器有了一个很浅的理解,下面的知识需要大家自行去学习了,如果我对git有了新的理解的话,我还会在这里给大家分享。如果觉得我写的还行那么请关注我,我会持续更新的。😊😊😊