分布式版本控制系统——Git

0. git常用命令速查

在这里插入图片描述

1. Git

1.1 什么是Git?

官网定义:

Git是一个免费的,开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于SVN(Subversion)、CVS、Perforce和ClearCase等版本控制工具。
廉价的本地库:Git的本地库是放在本地电脑的磁盘上。

总结:git是一个项目管理工具,可以很方便的用来管理我们的代码。
Git官网地址
https://git-scm.com/
Git的logo
在这里插入图片描述
注:最左边是Git的logo,Git的logo是一个分叉,一个分支,体现了Git最强大的特性就是分支!!!最右边的英文描述 --everythint-is-local 翻译过来是 所有的东西都在本地

1.2 Git下载

git官网可以看到git的最新版本是2.45.2,点击Download for Windows,跳转到下载页面。
在这里插入图片描述

在这里插入图片描述

1.3 什么是版本控制?

版本控制是一种机制,可以记录文件修改的历史记录,从而让用户能够查看文件的历史版本,方便切换文件的版本。

生活中版本控制的例子:

  • 下面是一个本科生的毕业论文,毕业论文目录下,有下面这些文件,开始写毕业论文了,新建了XXX毕业论文.docx文档,然后在里面写,写完了交给老师检查,一般论文没那么容易过,老师会嫌你这里写的不好,那里写的不好,把论文打回让你改,但是通常,是个正常人,就不会在原有论文的基础直接进行修改,因为你修改后的论文可能还比不上修改前的,所以我们通常会将上面的文档ctrl+c, ctrl+v,改个名字叫XXX毕业论文改1.docx,然后在XXX毕业论文改1.docx里面修改,改好了再给老师检查,老师还不满意,你又要 循环ctrl+c,ctrl+v,修改操作,直到老师满意。

  • 这里就是利用了文件的多副本,做了一个版本控制。
    在这里插入图片描述

1.4 为什么需要版本控制?

因为在公司不是单打独斗,从个人开发过渡到了团队协作(很多人共同开发一个项目)。
图片演示:
公司服务器有第1版的代码,里面有aaa bbb ccc ddd 三行代码,程序员觉得第一版的代码写的不好,从服务器把第1版的代码下载下来,然后在第二行bbb后面加了222,因为是团队协作,不只有小红一个人,在程序员小红下载的同时,程序员小蓝把第一版的代码下载到本地,在第4行ddd后面加了444,如果利用多副本的方式做版本控制,小蓝的代码很可能把小红修改后的代码给覆盖掉,所以我们需要像git这样的版本控制工具来合并这两个人修改的代码,把222和444都留下来。
在这里插入图片描述

在这里插入图片描述

1.5 集中式版本控制工具和分布式版本控制工具

版本控制工具分类

  • 集中式版本控制工具:SVN(Subversion)、CVS、VSS……
  • 分布式版本控制工具:Git,Mercurial、Bazaar、Darcs……
    集中式版本控制的架构图:
    在这里插入图片描述
    集中式版本控制的理解:集中式版本控制有一个唯一的中央服务器,程序员通过客户端连接到中央服务器,下载代码到本地,本地修改完了,提交到中央服务器,中央服务器的代码是始终是最新的版本,a写了一份代码,v1提交到中央服务器,b从服务器把v1下载下来,写了一个v2,修改完,提交到中央服务器,c从服务器把v2下载下来,写了一个v3,修改完,提交到中央服务器。
    好处:可以看到项目中的其他人正在做什么,管理员可以给不同的角色开放不同的权限,架构师,每个包,每个目录都有权限,而实习生,只有某些目录的curd权限,防止他把代码搞坏了。
    坏处:存在单点故障问题。中央服务器宕机了,断电了,硬盘坏了,谁都不能提交代码,也就不能协同工作。

分布式版本控制的架构图:
在这里插入图片描述
分布式版本控制的理解:没有中央服务器的概念,版本控制是在本地做的,每个人从远程库下载的代码,都是整个完整的项目,
解决了集中式版本控制的单点故障问题,即使远程库宕机了,虽然不能提交代码,但是还是可以做版本控制,因为版本控制是在本地做的。

1.6 Git的工作机制

在这里插入图片描述

小故事:假如你是一个程序员,压力大,和几个朋友出去喝酒,喝多了,想发泄一下情绪,在代码里写了一句骂老板的注释。

  • 如果你只是在工作区写代码,没事,第二天醒了,代码删了,老板不知道;
  • 如果你不仅在工作区写代码,还把代码添加到暂存区,也没事,第二天醒了,代码删了,老板不知道;
  • 如果你不仅在工作区写代码,还把代码添加到暂存区,并且把暂存区的代码提交到本地库,形成了历史版本,第二天醒了,删不了!你想把这个骂人的代码删了,如果骂人的代码版本是v3,只能在它的基础上修改,提交一个v4版本,如果老板不懂git,老板看不到,如果老板懂git,切换到v3版本,那这个时候你等着被辞退吧,哈哈哈😄。不过你可以把整个项目目录删了,简称删库跑路,不过这时候你等着被起诉吧!😄

1.7 Git安装

  1. 双击git安装包,进行安装。
    在这里插入图片描述

  2. 查看GNU协议,直接点击下一步
    在这里插入图片描述

  3. 选择git的安装位置
    在这里插入图片描述

  4. git选项配置,推荐默认配置,然后点击next
    在这里插入图片描述

  5. 选择git开始菜单的文件夹,不用改,点击next
    在这里插入图片描述

  6. 选择git的默认编辑器,建议用默认的vim编辑器,然后点击next
    在这里插入图片描述

  7. 默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。
    在这里插入图片描述

  8. 修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git
    在这里插入图片描述

  9. 选择可执行的ssh,选默认的就行,点击next
    在这里插入图片描述

  10. 选择后台客户端连接协议,选默认值 OpenSSL,然后下一步
    在这里插入图片描述

  11. 配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动
    转换,然后继续下一步。
    在这里插入图片描述

  12. 选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步。
    在这里插入图片描述

  13. 选择 Git pull 合并的模式,选择默认,然后下一步
    在这里插入图片描述

  14. 选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。
    在这里插入图片描述

  15. 其他配置,选择默认设置,然后下一步。
    在这里插入图片描述

  16. 配置实验室功能,选择默认的,然后install安装即可。
    在这里插入图片描述

  17. 正在安装,等待安装完成
    在这里插入图片描述

  18. 出现如下界面,安装完成。view release notes,查看版本信息,不要勾选,点击finish结束即可。

在这里插入图片描述
18. 在桌面上右键,菜单出现 Open Git GUI here 和 Open Git Bash here,表示安装成功。

  • Git GUI here:git的图形化客户端,界面丑几乎没人用
  • Git Bash here:git的命令行客户端,通常都在用这个。
    在这里插入图片描述
  1. 打开git bash here命令行客户端,通过ctrl+滚动鼠标滚轮可以跳转字体大小!
    在这里插入图片描述
    21.输入git --version,查看git的版本
    在这里插入图片描述

1.8 Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.emial 邮箱设置用户签名
git init初始化本地库
git status查看本地库的状态
git add 文件名添加到暂存区
git commit -m "日志信息" 文件名提交到本地库
git reflog查看历史记录/历史版本
git reset --hard 版本号版本穿梭/版本切换

说明:git的命令和linux的命令是通用的,因为他们都是linus开发的。

1.8.1 设置用户签名

第一次安装git,必须先设置用户签名,否则以后提交代码,会报错!
基本语法:
git config --global user.name 用户名
git config --global user.email 邮箱
在这里插入图片描述
说明:

  1. 用户签名是用户的身份证,每一个版本的提交信息中能看到用户的签名信息,来确定本次提交是谁提交的。
  2. 这里设置的用户签名和将来要登录github等代码托管中心的账号是没有任何关系的,用户签名只是客户端的一个标记。

如何验证用户签名设置成功
在windows的家目录下,查看.gitconfig文件的内容
在这里插入图片描述
可以看到刚刚设置的用户签名是保存在了这个文件中。
在这里插入图片描述

1.8.2 初始化本地库

在d盘下的Git-Space下,假如说这个下面有一个项目,创建一个目录,起个名字叫git-demo,要想git管理这个目录,获取目录的管理权,必须初始化本地库。
在这里插入图片描述
基本语法:git init
实操
在这里插入图片描述
查看结果
在D:/Git-Space/git-demo下生成了.git 的目录,.git是隐藏目录(浅色的目录,如果没有显示点查看->勾选隐藏的项目),这个.git目录就是git的本地库。
在这里插入图片描述
.git目录下有一些文件和目录,不要乱动!
在这里插入图片描述

1.8.3 查看本地库的状态

命令:git status
在这里插入图片描述
1、创建文件
在这里插入图片描述

在文件里输入i,进入输入模式,输入16行 hello git! hello java!,按 esc回到命令模式,按yy复制当前行,按p往下粘贴一行,粘贴完毕,按:wq保存并退出。

2、查看文件的内容:cat hello.txt在这里插入图片描述
3、再次查看本地库的状态 git status
在这里插入图片描述
追踪文件:也就是将工作区的文件添加到暂存区。

1.8.4 添加暂存区

命令:git add 文件名
添加暂存区:将工作区的文件添加到暂存区,暂存区的文件是可以直接删掉的。
1、将hello.txt添加到暂存区
在这里插入图片描述

2、再次查看本地库的状态
在这里插入图片描述
3、删除暂存区的hello.txt
在这里插入图片描述
注意:删除hello.txt,只是删除暂存区的hello.txt文件,工作区的hello.txt还在!
在这里插入图片描述

4、再次查看本地库的状态
在这里插入图片描述
5、将文件重新添加到暂存区
在这里插入图片描述

1.8.5 提交本地库

提交本地库:将暂存区的文件提交到本地库,会形成历史版本,因为形成了历史版本,本地库的文件是不可以直接删掉的。
命令:git commit -m “本次提交的日志信息” 文件名
在这里插入图片描述

查看本地库的状态
在这里插入图片描述

1.8.6 修改文件

1、vim hello.txt 在第一行后面加上10个2
在这里插入图片描述
2、查看本地库的状态
在这里插入图片描述
3、添加到暂存区,然后提交到本地库
添加到暂存区
在这里插入图片描述
提交到本地库
在这里插入图片描述
查看版本信息
head 指针指向了第二个版本
在这里插入图片描述
查看文件的内容
在这里插入图片描述
4、vim hello.txt 在第二行代码的后面加10个3
在这里插入图片描述
查看本地库的状态,modified表示文件被修改了,hello.txt红色表示文件没有被添加到暂存区,添加到暂存区,查看本地库状态,变绿了,说明已经添加到暂存区了
在这里插入图片描述
**提交到本地库,查看本地库的状态,日志很干净了,说明已经被提交了本地库,查看版本信息,head指针指向了第三个版本。
**
在这里插入图片描述
查看文件的内容
在这里插入图片描述
1.7 切换版本(穿梭版本)
查看历史版本
命令:
git reflog:查看简略的版本信息。
git log:查看详细的版本信息。

git reflog:查看简略的版本信息,可以看到当前head指针指向master分支,master分支指向第三个版本third commit。
在这里插入图片描述
git log:查看详细的版本信息,不仅可以看到当前head指针指向master分支,master分支指向第三个版本third commit。
并且可以看到提交的版本,是什么人提交的,什么时候提交的,还会显示完整的版本号。
在这里插入图片描述
切换版本
命令:git reset --hard 想要切换版本的版本号
最新的第三版的代码写的不好,想切换到第二个版本,可以看到head指向master,master重新指向了9b8c00这个版本,也就是second commit 这个版本。
在这里插入图片描述
打开下面的HEAD文件和.git/refs/heads/master文件
在这里插入图片描述
在这里插入图片描述
head 指针指向了master分支。
在这里插入图片描述
master分支指向了9b8c000这个版本,也就是第二个版本。
在这里插入图片描述

切换版本,不仅能切换到前面的版本,还能切换到后面的版本。
现在切换到第三个版本。
在这里插入图片描述
master重新指向了e247e7e这个版本,也就是第三个版本。
在这里插入图片描述

查看文件的内容
在这里插入图片描述

切换版本的原理图
在这里插入图片描述

1.9 git分支

在企业级开发中,通常会有三种环境,开发环境,测试环境,生产环境,三种环境有对应的服务器,开发服务器,测试服务器,生产服务器。
在这里插入图片描述

1.9.1 什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)
在这里插入图片描述
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。

1.9.2 查看,创建,切换分支

分支的常用命令
分支的英文:branch

命令的名称作用
git branch -v查看分支
git branch 分支名创建分支
git checkout 分支名切换分支
git merge 分支名将指定的分支合并到当前分支上

查看分支
含义:查看当前有哪些分支
命令:git branch -v (v 是 view:查看 的首字母
实操:
当前只有一个master分支,并且可以看到master前面有个*,说明当前在master分支上,git-demo右边(master)也能看出当前在master分支上。
在这里插入图片描述

创建分支
命令:git branch 分支名
实操:当master分支出现bug的时候,我们可以创建一个hot-fix分支(热修分支:紧急修复的一个分支),把bug解决一下,执行命令,没有任何提示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2846db5f663846aea7403be06cf74925.png
查看分支,一共有两个分支:master分支和hot-fix分支
在这里插入图片描述
切换分支
含义:从当前分支切换当指定的分支。
命令:git checkout 分支名
实操:切换到hot-fix分支,修改代码,执行命令,提示已经切换到了hot-fix分支。
在这里插入图片描述
查看分支,当前一共有两个分支master和hot-fix,*在hot-fix前面,右上角git-demo右边是hot-fix都能说明,当前在hot-fix分支上。
在这里插入图片描述
修改hello.txt
查看hello.txt的内容
在这里插入图片描述
修改hello.txt,由于第一行10个2,第二行10个3,导致了程序界面卡顿,所以,把2和3数量都变成5个,然后:wq保存
在这里插入图片描述
查看本地库的状态
说明有文件被修改了。
在这里插入图片描述

将修改的文件添加到暂存区,查看本地库的状态,发现变绿,说明已经添加到暂存区了。
在这里插入图片描述
将暂存区的文件提交到本地库,发现两行代码被修改了,再次查看本地库的状态,发现提示信息变清爽了,说明已经提交到本地库了。
在这里插入图片描述
查看hello.txt的内容
在这里插入图片描述
查看本地磁盘上hello.txt的内容
在这里插入图片描述
查看HEAD文件,发现head指针指向了hot-fix分支
在这里插入图片描述
查看hot-fix文件,发现hot-fix指向173e031这个版本。
在这里插入图片描述
查看版本信息
发现head指针指向hot-fix分支,hot-fix分支指向173e031这个版本,也就是hot-fix first commit这个版本,第二行,提示已经从master分支移动到hot-fix分支。
在这里插入图片描述

1.9.3 合并分支

含义:将指定的分支合并到当前分支上。
命令:git merge 分支名
合并分支有两种情况,一种是正常合并,一种是合并产生冲突了,怎么合并,简称为冲突合并。
①正常合并
1. 切换回master分支,查看hello.txt文件的内容,还是10个2,10和3在这里插入图片描述
2. 现在我想把hot-fix分支合并到当前分支(master分支),发现合并成功,提示两行代码被修改了,查看hello.txt文件的内容,发现变成了5个2和5个3
为什么这次合并是成功的,因为我master分支没有修改这个文件,hot-fix文件是基于master分支的文件修改了两行代码,所以合并过来,就是正常的修改,可以合并。
在这里插入图片描述

②冲突合并

1.10 团队协作

团队内协作
在这里插入图片描述

跨团队协作
在这里插入图片描述

2. GitHub

3. Gitee码云

4. GitLab

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值