概述 :
git是一个版本管理工具 , 是用于管理项目的版本的 , 它是一个分布式的项目管理工具 ( 支持多分支 , 不区分客户端服务端 ) , 每个本地的代码都是一个本地的仓库 , 然后最终提交到远程仓库
svn也是一个版本管理工具 , 它是集中式的项目管理工具 ( 单分支 , 要客户端服务端上传 )
git的安装和下载
git官网 : https://git-scm.com/
下载链接 : https://git-scm.com/download/win
安装
无脑下一步 ( 最好不要更改默认路径 )
测试是否安装成功
找到一个文件夹点击右键 弹窗有一个git gui here(从当前位置打开gui)和git bash here(从当前位置打开命令行)
dos命令测试 ( 找到当前安装路径下的bin目录 , 进入cmd )
git --version
git入门
dos命令操作 ( window的相关命令行 ,使用cmd打开 )
cd 进入文件夹 mkdir 创建文件夹 ipconfig 查看网络配置 cls清除所有内容
linux命令操作 ( linux的命令行 )
cd 进入文件夹 ls 查看文件 ll 查看所有文件以列表形式 clear 清除所有的内容 shutdown 关机 reboot 重启 mkdir 创建文件夹 tar 解压
git bash here 打开的命令窗口是一个linux命令
创建本地仓库 ( 创建的git目录是一个隐藏文件夹 )
git init #初始化本地仓库
git的分区
不管是本地仓库还是远程仓库都是有分区的 , git仓库分为三个区
-
工作区 ( 就是你的工作代码 , 必须在你的git目录下 )
-
暂存区 ( 暂存你的代码 , 通过状态可以查看你的暂存内容 , 可清除更改 )
-
历史区 ( 也叫版本库 ) (通过日志可以查看你的提交记录 , 最终记录存在历史区 , 历史区数据不能删除 , 可以撤回 )
分区相关操作
-
从工作区到暂存区
git add 文件名 #添加对应的文件到暂存区 git add 文件夹名 #添加对应的文件夹内的所有文件到暂存区(没有文件就加不上) git add . #添加所有的文件到暂存区 git add * #添加所有的文件到暂存区 git add --all #添加所有文件到暂存区
-
查看状态
git status
-
从暂存区撤回 ( 不会影响工作区 )
git reset HEAD -- 文件名 git reset HEAD -- 文件夹 git reset HEAD -- . #撤回所有 git reset HEAD -- * #撤回所有
-
从暂时区到历史区
在第一次提交的时候需要配置用户名和邮箱号
从暂存区提交到历史区 , 暂存区的东西就没有了
git config user.username 名字 --global #全局配置用户名 git config user.email 邮箱 --global #全局配置邮箱
-
提交相关命令
git commit 文件名 git commit 文件夹 git commit . git commit *
vi编辑器
vi编辑器的三种模式
-
阅读模式 ( 默认的模式 , 从插入模式进入阅读模式按esc键 )
-
插入模式 ( 可以进行编辑 , 需要通过阅读模式进入,按i a o都可以进去 )
-
命令行模式 ( 执行命令 , 需要从阅读模式进入 按:wq保存退出 )
-
直接设置提交信息进行提交
git commit 文件名 -m 提交信息
从暂时区提交到历史区 , 暂时区就没有内容了
-
提交记录查看
git log
-
从版本库撤回 ( 复原 )
git reset --hard 版本号 git reset --hard HEAD #撤回最近提交的
命令 | 是否影响暂时区 | 是否影响工作区 |
---|---|---|
--soft | ✔️ | ❌ |
--mixed(默认) | ❌ | ✔️ |
--hard | ✔️ | ✔️ |
分支
概述 : 分支其实就是将每个功能进行相关的抽取 , 让每个功能之间不受影响 .
示例
某公司开发一个医药管理系统 , 张三负责一个登录功能 , 李四负责一个审批功能 . 两个功能之间是没有关系的 , 在下载代码的时候 , 张三只需要下载张三的代码 , 李四只需要下载李四的代码 , 因为我们现在只有一个分支 , 那么张三的代码和李四的代码都要上传到这个分支 , 那么就会出现张三的代码可能会覆盖李四的代码 ( 混淆 ) , 为了防止这个操作就可以给张三的功能和李四的功能开辟不同的分支 那么他们就不会影响了 . 分支是为了方便多人开发协作
分支命名规范
git 分支分为集成分支、功能分支和修复分支,分别命名为 master、feature 和 fix,均为单数。不可使 用 features、future、hotfixes、hotfixs 等错误名称。
-
master(主分支,永远是可用的稳定版本,不能直接在该分支上开发)
-
develop (开发主分支)
-
master_check(未上线前的开发分支,该分支只做只合并操作,不能直接在该分支上开发,前期 开发完成后将feature分支合并到此分支)
-
online(线上分支,由发版人员确认测试没问题后,将online_check分支合并到此分支)
-
online_check(线上开发主分支,所有新功能以这个分支来创建自己的开发分支,该分支只做只合 并操作,不能直接在该分支上开发)
-
feature-xxx(功能开发分支,在develop上创建分支,以自己开发功能模块命名,功能测试正常后 合并到develop分支,开发完成后合并到online_check分支上)
feature/login
-
fix-xxx(修改bug分支,在master分支上创建,修复完成后合并到 online_check)
注意事项:
-
一个分支尽量开发一个功能模块,不要多个功能模块在一个分支上开发。
-
feature 分支在申请合并之前,最好是先 pull 一下master_check分支下来,看一下有没有冲突, 如果有就先解决冲突后再申请合并。
分支相关操作
开辟分支
git branch 分支名
查看分支 ( *号表示当前所在分支 )
git branch
切换分支
git checkout 分支名
删除分支 ( 不能自己删自己 )
git branch -d 分支名 (只能删除文件夹内没有内容的) git branch -D 分支名 (强制删除)
合并分支 ( 将指定分类合并到当前分支 )
git merge 分支名(合并到哪里的分支名)
衍合分支 ( 将指定分支衍合到当前分支 )
git rebase 分支名
衍合和合并的区别在于 , 合并会产生一个新分类 ( merge commit ) , 衍合不会
gitEE
概述 :
gitEE是一个代码托管平台 ( 国内的 , 码云 ) , 它其实也是一个远程仓库 ( 可以将你的代码上传到这个仓库 ) ,类似于gitEE的平台还有gitHub ( 全球性的托管平台 ) 以及gitHub的子产品 ( 类似于gitHub的一个托管平台gitLable( 需要自己搭建环境 , 私有服务器 ) )
工作中用的一般是gitLable ( 会分发账号 )
gitEE入门
1.注册
2.登录
3.新建仓库
克隆
4.提交内容到远程仓库
git add . git commit . -m 信息 git remote add origin url地址 #如果这个.git文件夹是由gitee平台创建的(克隆),就不需要连接 git push origin master
git冲突
就是版本的冲突 , 比如a和b维护同一份代码 (版本0) , a维护好先提交了版本1 , b再提交的话就会有冲突(版本0) , 也就不能提交上去 , 这个时候就需要解决这个问题 , 我们可以先拉取最新的版本 , 这个时候b版本就变成了版本1 , 然后b再提交的时候版本变成了版本2就可以顺利提交 , 然后如果a和b写的是同一份文件也会有问题 ,因为不知道应该保留谁的文件 , 这时候就需要比对代码保留对应的内容然后人工处理冲突
git fetch origin master:temp #请求master的内容并进行备份,备份的分支叫temp git diff temp #比对 git merge temp #合并
vscode来处理
扩展内容
http的协商缓存和强制缓存
缓存 概述 :
下载一个电影到你本地就称为缓存 , 就是将资源下载到你的电脑上 , 缓存的好处就是提高速度 , 它可以将我们的页面渲染的性能提高 , http为了提高我们的数据请求的速度性能它就内置了缓存 , 为了减少服务器处理提高性能
http内置缓存有2种 , 分别为
-
强制缓存 ( 不会发送请求 , 读取本地数据 )
--就是强制性的让页面请求的数据通过缓存读取 ( 数据不变的而且有时效性 ) 在响应头里
--cache-control 缓存控制器
--返回的状态码一定是200
-
协商缓存 ( 请求一定会发送 )
--就是服务器和浏览器进行协商 , 看对应的数据是否要重新响应
--etag 是用于判断当前的文件是否发生变化
--last-modified 文件的最后修改时间 , 通过时间判断数据是否发生变化
--如果数据没有更改 , 那么给你返回的状态码是304
--如果数据发生变化 , 那么会重新响应数据 , 返回的状态码为200
http的协商缓存和强制缓存的区别
-
强制缓存的优先级高于协商缓存
-
强制缓存的数据一定没有发生变化 , 所以返回的状态一定是200
-
协商缓存是数据可能发生变化 , 或者是强制缓存过期了 , 这个时候浏览器一定会再次发请求 , 如果数据发生变化 , 返回的状态码是200 , 没有变化状态码为304
-
强制缓存用cache-control控制 ( 是http版本1.1新增的 , 1.0是expires(过期时间)来控制 ) , 协商缓存用etag和last-modified来共同控制