1.版本控制(简单理解:就是软件对每次操作之后提交的记录)

  • 文件版本

  • 版本控制软件

  • 版本控制的好处

  • 版本控制的分类

  • 本地版本控制系统

  • 集中化版本控制系统

  • 分布式版本控制系统

2. Git基础概念与工作流程

  • 什么是Git?

开源的分布式版本控制系统,快速高效处理从很小到很大的项目版本管理

  • Git特性:直接记录快照,而非差异比较

SVN基本差异版本控制,存储的是一组基本文件和每个文件随时间逐步积累的差异

  • 好处:节省磁盘空间
  • 缺点:
    • 耗时、效率低
    • 每次切换版本的时候,都需要在基本的文件基础上,应用每个差异,从而生成目标版本对应的文件

Git快照是在原有文件版本基础上重新生成一份新的文件,类似于备份,为了效率,如果文件没有修改,Git不在重新存储该文件,而是保留一个链接指向之前存储的文件

  • 缺点:占用磁盘空间较大
  • 优点:版本切换时候非常块,因为每个版本都是完整的文件快照,切换版本时候直接回复目标版本的快照即可

  • Git管理拥有三个区域

    • 工作区

    • 暂存区

    • Git仓库

  • Git的三种状态:注意存在暂存区

  • 工作区的文件被修改了,但是还没放在暂存区,就是已修改的状态
  • 但是文件已经修改放在暂存区,就属于已暂存状态
  • 如果Git仓库中保存着特定版本的文件,就属于已提交状态
  • Git工作流程

  • 工作中修改文件
  • 将想要下次提交的更改进行暂存
  • 提交更新,找到暂存区的文件,将快照永久性存储Git仓库

3.Git基础(并操作用户初始化操作:声明自己的git版本控制)

  • 安装:

Git (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.namegit 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仓库中删除了哪个文件

跟踪文件:gitadd 文件名.文件后缀名

  • 提交更新git commit -m “提交信息”

  • 暂存区中有一个文件等待被提交到Git仓库
  • 将追踪文件提交到暂存区之后进行再进行查看

对已经提交的文件进行修改

  • 注意修改之后的文件没有防止缓存区会出现红色:modified

  • 修改index.html文件
  • 运行git status
  • 运行git status -s

暂存已修改的文件:gitadd 文件名.文件后缀名

工作区中的index.html文件已经被修改,如果要暂存这次修改,再次使用git add命令,这个命令是多功能命令,主要三个功效:

  • 可以使用其开始跟踪新文件

  • 把已经跟踪的文件,并且修改的文件放到暂存区

  • 把有冲突的文件标为已经解决状态

再次提交已经暂存的文件:git commit -m “提交信息”

即可将在那存取中记录index.html快照(原有版本生成的新的文件),提交到Git仓库中进行保存

撤销对文件的修改 git checkout — 修改的文件名.后缀名

  • 操作结果:所有修改丢失,并且无法恢复,危险性比较高
  • 本质就是用git仓库中文件覆盖工作区中指定文件

向暂存区中一次性添加多个文件:gitadd.

  • 开发中经常使用这个命令,将新增和修改过后的文件加入到暂存区

这里修改了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.txtdoc/*.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 远程分支名称

  • 远程删除没有本地删除:本地删除方式

  • 强制删除