1.版本控制(简单理解:就是软件对每次操作之后提交的记录)
-
文件版本
-
版本控制软件
-
版本控制的好处
-
版本控制的分类
-
本地版本控制系统
-
集中化版本控制系统
-
分布式版本控制系统
2. Git基础概念与工作流程
-
什么是Git?
开源的分布式版本控制系统,快速高效处理从很小到很大的项目版本管理
-
Git特性:直接记录快照,而非差异比较
SVN基本差异版本控制,存储的是一组基本文件和每个文件随时间逐步积累的差异
- 好处:节省磁盘空间
- 缺点:
- 耗时、效率低
- 每次切换版本的时候,都需要在基本的文件基础上,应用每个差异,从而生成目标版本对应的文件
Git快照是在原有文件版本基础上重新生成一份新的文件,类似于备份,为了效率,如果文件没有修改,Git不在重新存储该文件,而是保留一个链接指向之前存储的文件
- 缺点:占用磁盘空间较大
- 优点:版本切换时候非常块,因为每个版本都是完整的文件快照,切换版本时候直接回复目标版本的快照即可
-
Git 管理拥有三个区域
-
工作区
-
暂存区
-
Git仓库
-
-
Git的三种状态:注意存在暂存区
- 工作区的文件被修改了,但是还没放在暂存区,就是已修改的状态
- 但是文件已经修改放在暂存区,就属于已暂存状态
- 如果Git仓库中保存着特定版本的文件,就属于已提交状态
-
Git工作流程
- 工作中修改文件
- 将想要下次提交的更改进行暂存
- 提交更新,找到暂存区的文件,将快照永久性存储Git仓库
3.Git基础(并操作用户初始化操作:声明自己的git版本控制)
-
安装:
Git (git-scm.com)https://git-scm.com/
安装之后会存在的右键点击效果
-
Git安装之后首先配置用户信息
- 定义当前计算机的用户名和email密码(注意只需要声明一次就可以长期使用)
git config --global user.name "名字"
git config --gloabl user.email "email地址"
-
Git全局配置文件
- 配置用户信息之后就会存在本地文件夹:.gitconfig
-
检查配置信息:除了上面的全局配置存在的地方,可以使用命令进行查看
# 查看所有全局配置
git config --list --gloabal
# 查看指定的全局配置
git config user.name
git config user.email
-
查看帮助信息:可以对配置好的信息进行查看配置(可略)
#想要打开git config命令的帮助手册(网页版本)
git help config
#简单语法
git config -h
4. Git基础操作
获取Git仓库的两种方式:(先得有仓库才能完善后面操作):本地创建库,从远程克隆库
- 将尚未进行版本控制的本地目录转换为Git仓库
- 从其他服务器克隆一个存在的Git仓库
在现有(已经创建好的总文件夹下:例如一个工程文件)目录下进行初始仓库
- 打开Git Bush
执行git init :当前工程文件夹转为Git仓库
之后会存在一个git仓库文件夹:这是隐藏文件,需要将隐藏文件夹显示打开
工作区的四种状态
- 分为两大类:未被管理和已被管理(需要先被管理追踪才能继续操作)
- 未被管理:指的是新建的文件没有被git发现
- 已被管理:新创建的文件已经被git已经追踪/发现
- 注意:最终要实现的目的就是未修改状态
-
检查文件的状态操作:git ststus(这个方法是查看所有操作状态)
精简方式查看文件状态
git status -s (一般使用此方法:与下面方法相同)
git status --short
以下是会出现的结果(后面就是操作的文件):
- ? ? : 表示文件未被跟踪
- M : 表示文件被修改
- A : 表示文件有新增文件
- D : 表示从git仓库中删除了哪个文件
跟踪文件:git add 文件名.文件后缀名
提交更新 git commit -m “提交信息”
- 暂存区中有一个文件等待被提交到Git仓库
- 将追踪文件提交到暂存区之后进行再进行查看
对已经提交的文件进行修改
注意修改之后的文件没有防止缓存区会出现红色:modified
- 修改index.html文件
- 运行git status
- 运行git status -s
暂存已修改的文件:git add 文件名.文件后缀名
工作区中的index.html文件已经被修改,如果要暂存这次修改,再次使用git add命令,这个命令是多功能命令,主要三个功效:
可以使用其开始跟踪新文件
把已经跟踪的文件,并且修改的文件放到暂存区
把有冲突的文件标为已经解决状态
再次提交已经暂存的文件:git commit -m “提交信息”
即可将在那存取中记录index.html快照(原有版本生成的新的文件),提交到Git仓库中进行保存
撤销对文件的修改 git checkout -- 修改的文件名.后缀名
- 操作结果:所有修改丢失,并且无法恢复,危险性比较高
- 本质就是用git仓库中文件覆盖工作区中指定文件
向暂存区中一次性添加多个文件: git add.
开发中经常使用这个命令,将新增和修改过后的文件加入到暂存区
这里修改了html文件并且新增了js文件和css文件
基础操作总结:
初始化仓库: git init
查看文件状态: git status -s
一次性将文件放到暂存区: git add .
将暂存区提交到git仓库命令: git commit -a -m "提交信息"
取消暂存的文件:
git reset HEAD 要移除的文件名称 :移除指定文件
git reset HEAD . 移除所有文件
跳过使用暂存区域:git commit - a -m"描述信息"
Git标准的工作流程是:工作区 -> 暂存区 ->Git仓库
简化后的工作流程:工作区--> Git仓库
从Git仓库中移除文件
从git仓库和工作区同时移除对应文件: git rm -f index.js
只从git仓库中移除: git rm --cached index.css
git忽略文件 .gitnore配置文件
- #开头的是注释
- /开头的是防止递归
- 结尾/的是目录
- !开头的标识取反
- 使用glob模式进行文件和文件夹的匹配(指简化了的正则表达式)
glob模式
- 星号*匹配零个或者多个字符
- [abc] 匹配任何一列在方括号中的字符(此方案匹配一个a或匹配一个b或匹配一个c)
- 问号?只匹配一个任意字符
- 在方括号中使用短划线分割两个字符,标识所有在这两个字符范围内都可以匹配(比如[0-9]标识匹配所有的0-9的数字)
- 两个星号**匹配任意中间的目录(比如a/**/a可匹配a/z、a/b/z或者a/b/c/z)
#忽略 所有.a文件
*.a
#但是跟踪 lib.a,即使前面忽略了.a文件
!lib.a
#只忽略目录下的TOOD文件,但是不忽略subdir/TODO
/TODO
#忽略任何目录下名为build文件
build/
#忽略doc/notes.txt但是不忽略doc/server/arch.txt
doc/*.txt
#忽略doc/ 目录机器所有子目录下的.pdf文件
doc/**/*.pdf
例子: 创建gitnor文件之后通过文本编辑器设置忽略的文件
查看提交历史: git log
包含作者、邮箱、时间、提示信息
q可以退出当前查看
版本切换
回到第一个版本:使用单独的版本号
回到之前的版本
5. 了解Git开源
什么是开源
什么是开源协议 :
开源并不意味完全 没有限制,为了限制使用者的使用范围和保护作者的权力,每个开源项目都应该遵守开源许可协议
五种开源许可协议
开源托管平台:
GitHub:全球最好开源托管平台
GitLab:企业用户较多
Gitee:码云(国产GitHub)
GitHub访问方式:
Https:零配置,之前每次访问都需要输入账户密码(现在需要了)
SSH:额外配置(配置之后不用重复输入账号密码)
基于Https将git本地库上传到远程库(首次)
修改本地文件再上传 (可以直接使用命令进行上传)
这里已经不是第一次上传
基于SSH key将git本地库上传到远程
1. 生成SSH key
ssh-keygen -t rsa -b 4096 -C "email"
连续三次回车,可以在c:\user\用户文件夹\.ssh目录中生成id_rsa和id_rsa.pub两个文件
2. 配置SSH key
打开id_rsa.pub文件并全部复制
- 登录github:头像->Setting-> SSH and GPG Keys -> New SSH key
- 将文件中内容粘贴到Key对应文本框
- title文本框填写一个名称,标识key从何而来
3. 检测SSH key是否配置成功
gitbush中测试: ssh -T git@github.com
输入yes:
4. 将本地库上传到GitHub
在当前git仓库目录中将文件上
远程仓库的使用
将远程仓库克隆到本地:git clone 远程仓库地址
6. 分支
1. 什么是分支?
相当于平行宇宙
当前平行宇宙一个学git一个学SVN
在某个时间点,两个平行宇宙合并了,结果你即会了Git也学会了SVN
2. 分支在实际开发中的作用
在进行多人协作的时候,为了防止互相干扰,提高协同开发,每个开发者都基于分支进行项目开发
3. master(main)主分支
初始化git本地仓库时候,git默认就创建了main主分支
主分支:用来保存和记录整个项目已经完成的功能代码(删除和合并都是在主分支进行操作)
不允许直接在master主分支上修改代码,因为这样的风险太高,容易导致这个项目崩溃
4. 功能分支
功能分支:专门用来开发新功能的分支(功能实现完成之后会合并到主分支,)
5. 查看分支列表
git branch
- 分支前面的*标识所处的分支
6. 创建新的分支
git branch 新分支名字
7. 切换分支
git checkout 切换的分支名(注意类似于撤销对文件的修改)
8. 分支的快速创建和切换
git checkout -b 分支名称
9. 合并分支
- 切换到当前主分支
git checkout main
- 运行命令将分支合并到主分支
git merge 分支名
可以查看文件的内存占比判断是否已经进行了切换
10. 删除分支
git branch -d 分支名称
11. 分支冲突合并
两个不同分支对同一个文件进行不同的修改,git无法干净的的合并
此时需要打开这些包含冲突的文件手动解决冲突
打开vscode当前修改的的文件会存在git操作之后的选择:
- 选择哪一次更改(直接选择上方到的操作按钮)
解决完合并冲突之后再次进行上传
12. 本地分支推送到远程仓库
git push -u origin 远程仓库名 (本地分支名:远程分支名)
- 如果想要本地分支名字和远程库分支名一样,就只需要一个本地分支名
分支名不同
git push -u origin payment:pay
分支名相同
git push -u origin payment
第一次推送分支需要带-u参数,此后可以使用git.push推送代码到远程分支
13. 查看远程仓库中所有分支列表
git remot show 远程仓库名
14. 远程分支操作
14-1 远程跟踪分支
目的:从远程库将远程分支下载到本地仓库中
#从远程仓库中把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同 git checkout 远程分支的名称 #实例:pay就是远程库名字 git checkout pay #从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名 git checkout -b 本地分支名称 远程仓库名称/远程分支名称 #实例 git checkout -b payment origin/pay
14-2 拉取远程分支最新代码
git pull
14-3 删除远程仓库分支
git push origin --delete 远程分支名称
- 远程删除没有本地删除:本地删除方式
- 强制删除