一、Git
1.1版本的概念
我们在使用软件时,会同时使用软件的不同的版本
从一个经常使用的软件说起:问题-大家如果要安装QQ的话,会安装使用下面那个软件?C A/ QQ 2019.2.0007.exe B/ QQ 2020.4.76454.exe C/ QQ 2020.5.98021.exe 一般情况会选择使用C,因为最新版,包含了最完整的功能 最新版:包含了版本的概念
(1)初指一种书籍经过多次传抄、刻印或以其他方式而形成的各种不同本子。随着时代的发展,版本也开始应用于影视、软件等事物上,形容事物相同但介绍方法等不同的两个事物。
(2)软件版本编号制定是指为软件设置版本号码的方式。通常,版本号码会以数字订定。
(3)软件名称后面经常有一些英文和数字,如:CTS3.3.5、QQ 2021 Beta,这些都是软件的版本标志,通过它,我们可以对软件的类型有所了解。
各版本的时间轴演变,每一次版本的改变,都会有功能的改变。
1.2 管理版本
1.传统管理方式
问题:传统管理方式造成了本地电脑上有很多相同的文件,不容易维护,造成了非常混乱的局面。
2.版本控制方式
好处:使用版本控制以后,只需在本地保存一份,各个版本由版本控制软件来进行管理,常见的版本控制软件有git和svn。
1.3 git介绍
定义:
Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。
特点:
项目越大越复杂,协同开发者越多,越能体现出Git 的高性能和高可用性!并且git有 3个区域
生活中一个场景
场景描述:生活中采摘水果,最终水果流入到各大超市,大家能购买水果
1.4软件版本管理工具
场景描述:开发的一个项目,从开发工具到在线发布,经历了如下的流程:
三个区域:
-
工作区
-
暂存区
-
仓库区
1.5 安装步骤
下载
安装
参考:git安装教程.pdf
配置用户信息|初始配置
描述:安装完Git 之后,需要设置自己的用户名和邮件地址。进行管理的时候,Git
需要使用这些基本信息,来记录是谁对项目进行了操作
配置命令:
git config --global user.name 'xxx' git config --global user.email 'xxx'
效果如下图:
1.6 GIT操作步骤(快速入门)
(1)使用git初始化项目
本地计算机上创建一个项目文件夹: e:/work_web0308_git
打开 git bash 执行命令,命令行进入 e:/work_web0308_git
cd e:/work_web0308_git
(2) 执行命令,初始化当前项目为 git 管理的项目:
注意: 将文件夹初始化成git管理的项目文件夹,命令执行完成后,文件夹中会多出一个.git 隐藏文件夹 .git/文件夹中的文件,就是用来自动记录用户修改当前文件夹中的文件历史记录的! 不需要人工干预! git init
(3) 把工作区添加到暂存区
(4) 把暂存区添加到仓库区
1.7 Git命令和常规操作
init git管理初始化 add 工作区文件添加到暂存区 commit 暂存区文件添加到仓库区 status 查看项目状态 log 查看历史提交记录 reset 回退提交的版本 reflog 查看所有提交记录
1.7.1 回退历史版本
git总是有后悔药可以吃
git reset --hard 版本号 版本号说明: 1) HEAD^ 上一个版本 HEAD^^ HEAD^^^ .... 2)版本号(可以通过reflog来查看操作历史记录,然后使用版本号的前7位即可),例如:git reset --hard 227e72c
1.8文件忽略
介绍
对于无需使用git进行管理的文件或文件夹使用此文件进行配置
使用步骤:
(1)在.git的同级目录下创建 .gitignore文件,注意:前面有一个
(2)在文件中添加要忽略的文件名称或文件夹名称
常用配置规则:
(1) /git-demo1/ 过滤整个文件夹
(2) *.txt 过滤所有.txt文件
(3) /git-demo1/a.html 过滤某个具体文件
1.9 分支
介绍
git版本控制系统支持分支操作。使用分支意味着可以从开发主线上分离开来,然后在不影响主线的同时继续工作。默认只有一个分支为master主分支。
什么是主分支?
在初始化本地 Git 仓库的时候,Git 默认已经帮我们创建了一个名字叫做 master 的分支。通常我们把这个master 分支叫做主分支
主分支的问题
在进行多人协作开发的时候,为了防止互相干扰,提高协同开发的体验,建议每个开发者都基于分支进行项目功能的开发
分支解决问题:
用来保存和记录整个项目已完成的功能代码。但是不允许程序员直接在master 分支上修改代码,这样做的风险太高,容易导致整个项目崩溃。
分支相关命令:
branch branch 分支名 checkout merge
解决冲突
介绍:如果在两个不同的分支中,对同一个文件进行了不同的修改,Git 就没法合并它们。 我们需要打开这些包含冲突的文件然后手动解决冲突。
1.10 远程仓库
介绍
Git 命令都是在本地执行,如果想通过 Git 分享你的代码或者与其他开发人员合作。就需要将文件放到一台其他开发人员能够连接的服务器上。这就是远程仓库的作用。
远程仓库分类:
(1)github:github是一个基于git的代码托管平台,在国外,速度比较慢,在大陆的使用很受影响
(2)gitee:gitee是一个基于git的代码托管平台,国内使用频率较多
(3)公司自己部署,了解即可,强调不是前端人员部署的,使用步骤和命令都一样
操作流程:
注册
创建远程仓库
本地文件推送到远程仓库
克隆和同步远程仓库
相关命令:
remote add 把远程仓库地址添加到本地。使本地仓库和远程仓库产生关联 remote -v 查看远程地址信息 push 1、如果使用-u参数,则第2次及以后可以直接使用git push把本地推送到远程仓库 2、添加gitee的账号和密码,正确则正常推送 clone 拷贝一个远程仓库到本地。 pull 当本地已有远程仓库,而远程仓库如果已经有更新,则可以使用此命令更新本地仓库。 例如:下班git push,早上上班 git pull
示例:(https)
1)将远程仓库地址添加到本地: git remote add origin https://gitee.com/dillionf/demo20211207.git 2)将本地仓库数据推送到远程仓库 git push -u origin master 注意:origin为远程仓库的名称,可以自定义 3)拷贝一个远程仓库到本地 git clone https://gitee.com/lyt-top/vue-next-admin.git 4)git pull origin master 从远程服务器更新项目到本地仓库
注意:
1)在使用pull命令从远程服务器拉去项目内容时,要保证本地仓库的版本低于远程服务器
2)运行 git pull 通常会从远程服务器上抓取数据并自动尝试合并到当前所在的分支。
1.11 SSH访问
简介:传统方式访问远程仓库的问题:传统方式本地和远程传输,需重复输入gitee的账号和密码,较为繁琐。SSH好处:免登录身份认证、数据加密传输。而SSH实现本地仓库和gitee之间免登录的加密数据传输。更重要的原因是团队协同开发更加方便。
SSH组成: (1)id_rsa 私钥文件,存放于开发者的电脑中 (2)id_rsa.pub 公钥文件 。
生成密钥步骤:1、打开Git Bash 2、执行相关命令 3、连续敲击3 次回车
相关命令
ssh-keygen
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
解释:生成公钥和密钥。特殊说明:会生成在C:\Users\用户名文件夹.ssh目录中。
ssh
ssh -T git@gitee.com
解释:
检测Github 的SSH key 是否配置成功。图示:6-15检查SSH是否配置成功
配置ssh:
(1)使用记事本打开id_rsa.pub文件,复制里面的文本内容
(2)登录gitee,点击头像-> 设置-> 安全设置:SSH公钥 -> 添加公钥
(3)将id_rsa.pub 文件中的内容,粘贴到公钥 对应的文本框中
(4)在Title 文本框中任意填写一个名称,来标识这个Key 的所有者是谁
注意:
1)若需要通过https的方式访问别人的public开源库,则可以通过输入用户名、密码的方式来完成提交(但一定要保证本地账户凭据与远程一致,若不一致,则使用下面步骤来修改)。
步骤:控制面板-用户账户-管理Windows 凭据-修改普通凭据即可
2)若使用SSH方式来提交仓库,则需要在账户中配置公钥(一个公钥对应一个私钥,若多人,需添加多个公钥)
1.12 Git和SVN的区别
SVN
SVN:SVN是一个开放源代码的集中式版本控制系统,用于多个人共同开发同一个项目,实现共享资源。集中式版本控制系统:版本库是集中存放在中央服务器,开发者需要先从中央服务器获取最新的版本文件,然后开始干活,最后再把自己修改的文件推送到中央服务器。
Git
Git:Git 是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地处理从很小到非常大的项目版本管理。分布式版本控制系统:没有“中央服务器”,每个人的电脑上都是一个完整的版本库,联网开发不是必须的。但两两开发者之间肯定不会以qq或U盘形式传送,也有一台充当“中央服务器”的电脑(gitee和github)。此服务器的作用仅是用来方便“交换”各开发之间的修改。