Git的概述
Git 分布式版本控制系统 本地版本管理 github :公有云代码托管平台 gitlab:私有云代码托管平台。
集中式&分布式
集中式
从中央代码服务器获取具体的代码,把代码下载到自己的本地,然后把代码,必须在有网络的情况下提交到中央服务器。典型的产品是SVN,所谓集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库瘫痪或者是不可访问的情况下,所有的使用者无法使用SVN,无法进行提交或者备份文件。
分布式
分布式版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git。当然为了团队协作,会把本地数据同步到GitLab服务器或者是GitHub等代码仓库。
Git安装
需要到https://git-scm.com/downloads进⾏下载,根据具体的操作系统来下载具体的安装包。安装完成后在控制台输入如下命令,显示版本信息则表示安装成功。
查看显示全局的配置信息:
git config --global --list
Git的生命周期
1、桌面创建learnGit的文件夹,并新建一个index.txt 的文件,编写内容如下:
2、初始化仓库(创建仓库)
控制台进入到learnGit目录下,然后输入git init,创建仓库。
3、确认需要添加以及跟踪的文件到暂存区域
4、提交文件到本地仓库
Git的log
查看Git的日志信息,主要使用到的命令具体汇总如下:
• git log --oneline #查看简陋的信息
• git log #查看所有的信息
• git log -1 #显示最新的一条提交记录信息
• git log --all --graph #查看提交的版本演变
• git reflog #记录git所有的操作,包含了提交以及回退
Git的回退
git的版本管理是通过指针来进⾏管理的,这个指针就是HEAD,那么也就是说HEAD表示当前版本,HEAD^表示的是上⼀个版本,HEAD^^表的是上上个版本。
git reset --hard 版本ID
git reset --hard HEAD管理
Git标签
git tag可以理解为:这对每个版本加上一个标签。标签涉及到的命令具体可以总结为:
• git tag -a tagName -m 标签注释:创建一个标签,并且加上注释
• git tag #查看标签信息
• git log --decorate #查看标签的详细信息
• git log --oneline --decorate #命令如上是一样的
• git tag -a标签名称 commitID -m 标签注释
• git show tagName #查看标签的具体详细的信息
• git diff 标签1 标签2 #查看两个不同标签的文件内容差异
Git的branch
git branch #查看当前的分⽀
git branch test #创建⼀个测试分⽀
git checkout test #切换分⽀
git checkout -b 分⽀名称#创建新的分⽀并且⽴即切换到新的分⽀信息
git branch -D 分⽀名称
git merge 分⽀名称#分⽀的合并信息,如下就是显示的是把test的分⽀代码合并到master的分⽀
代码分支: test :测试环境
dev:开发环境
master:主干分支,专门发布到线上(预发布/生产环境)
流程: 1、程序员在dev开发完的功能合并到test分支
2、测试这边在test测试完成后,合并到master
3、最后master 分支代码的上线
创建分支
解决冲突,并把master合并到test分支
Git Stash
git stash可以称为临时空间。它的使用场景主要可以总结为:git stash就是把暂存区未提交的内容,临时存放到一个区域,方便日后取回来再次使用。
场景可以描述为:修改一个文件后,进行了git add fileName文件,但是不进行具体的commit,这个时候可能需要干其他的事,比如需要修复线上的紧急bug,那么就需要把这个临时的存放到一个区域。
git stash list 查看stash区域的⽂件信息
git stash pop #恢复最新的stash进度到⼯作区
GitLab
1、下载GitLab,下载网址为:http://47.95.142.233/wuya/study.git
2、注册登录账户后,新建一个project
3、git clone #把远程的仓库克隆到本地
4、git pull :从远程的仓库获取代码到本地
git push:把本地的代码提交到远程的仓库
把本地的代码提交到远程的仓库时先git pull(更新一下)
通过生成密钥的命令生成密钥
在用户设置中添加密钥
然后在本地仓库中新建一个文件,添加内容后,将本地仓库的文件上传到远程仓库,显示如下:
在GitLab中可查看到提交的文件记录,显示如下:
相关面试题:
1、开发把代码合并到master 分支还需要测试吗?
需要:1、合并过程中可能会出现代码的丢失
2、开发和测试可以共用一套环境吗?
不可以,容易造成代码混乱,产生问题。
3、预发布环境和线上环境的相同与差异:
数据隔离、域名不同、代码和配置相同
4、如何实现数据的隔离?
使用影子库或者沙盒环境。
5、为什么需要预发布环境?
在产品正式上线前,先在预发布环境测试,再进入线上环境,为了尽可能减少问题的产生。