Git 一篇文章搞懂git (万字长文)

news2024/11/14 18:30:53

索引

  • 一. Git初识
      • 1.提出问题
      • 2.什么是版本控制器
      • 3.git安装
  • 二. git本地仓库基本操作
      • 1.Git本地仓库相关命令
      • 2.认识工作区,暂存区,版本库
      • 3.第一次Git追踪管理文件
      • 4.**有关于打印提交日志的命令**
      • 5.验证.git文件的指针指向
      • 6.Git管理的再理解——修改
      • 7.版本回退
      • 8.撤销修改
          • 1.情况一 对于工作区的代码,还没有add
          • 2.情况二:已经add,但没有commit
          • 3.情况三: 已经add 和commit
          • 4.删除版本库中已经提交的文件
      • 9.分支管理
          • 1.理解分支
          • 2.创建分支
          • 3.合并分支
          • 4.删除分支
          • 5.合并冲突
          • 6.合并分支策略
            • 1.ff模式
            • 1.非ff模式
          • 7.分支策略
            • 1.bug分支
            • 2.删除临时分支
  • 三.Git远程操作
      • 1.新建远程仓库
      • 2.克隆仓库
          • 1.使用HTTPS克隆
          • 1.使用SSH协议克隆
      • 3.向本地仓库的修改推送到远程仓库
      • 4.拉取远程仓库
      • 5.配置忽略文件
      • 6.标签管理
          • 1.创建标签
          • 2.推送标签
          • 3.展示标签信息
          • 4.删除标签

在这里插入图片描述

一. Git初识

1.提出问题

假设我们设计一个文档,以提交的次数记录版本号
“文档V1”
“文档V2”
“文档V3”

“文档V8”
随着文档的修改,有可能客户需要的反而是V2甚至是V1,因此,随着版本数量不断增多,无法记得版本与版本之间修改了什么,所以产生了 版本控制器

2.什么是版本控制器

所谓的版本控制器,就是可以让我们知道每一个文件的历史,以及它的发展过程的系统。
记录工程的每一次改动和版本迭代的一个管理系统,也便于多人协同。
目前最主流的版本控制器是 Git,Git可以控制电脑上所有格式的文件,例如excel,dwg等,对于我们而言,Git最重要的就是管理软件开发项目中的源码文件。

注意:
所有版本控制系统,包括Git,只能跟踪文本文件的改动,eg:txt文件,网页,所有的程序代码等,版本控制系统可以告诉你每次的改动,比如在第3行家里一个单词“hello”,或者在第7行删了一个单词“Linux”,但是图片视频等二进制文件,虽然也能由版本控制系统管理,但是无法跟踪文件的变化,只能判断出文件是否发生了变化,具体发生的改变是无法知道的。

3.git安装

我的平台是centos 7.9 安装git

sudo yum -y install git

二. git本地仓库基本操作

查看git安装的版本

git --version

1.Git本地仓库相关命令

仓库是进行版本控制的一个文件目录。

创建Git本地仓库的命令 ,该命令需要再文件目录下执行

git init

在这里插入图片描述

.git隐藏目录是Git跟踪仓库管理的,不要手动修改这个目录里面的文件,不然就全乱了

.git文件的细节如下
在这里插入图片描述
配置用户名和e-mail地址

git config user.name “zhang-juntong”
git config user.email “2016982259@qq.com”
此时配置的时候该机器下的该Git仓库
如果需要配置该机器下的所有Git仓库的用户名和e-mail
git config --global user.name “zhang-juntong”
git config --global user.email “2016982259@qq.com”

注意:执行上述命令都需要在仓库里

查看配置命令

git config -l

在这里插入图片描述
删除对应的配置命令

git config [–global] --unset user.name
git config [–global] --unset user.email

2.认识工作区,暂存区,版本库

如果在当前目录下再创建一个文件text.txt .然后我们能直接用Git来管理该文件吗?
在这里插入图片描述
不能!

工作区: 是在电脑上写的代码或者文件的目录
暂存区: 也叫做stage或index,一般放在.git 目录下的index文件(.git/index)中
版本库: 也叫repository ,工作区有一个影藏目录.git ,他不算工作区,而是Git的版本库。这个版本库中的所有文件都可以被Git管理,每个文件的修改删除,Git都能追踪,同时也可以便于在将来某个时刻还原。

下面这个图展示了工作区,暂存区和版本库之间的关系
在这里插入图片描述
git add 将文件从工作区提交到暂存区
git commit 将文件从暂存区提交到版本区
在这里插入图片描述
在这里插入图片描述

3.第一次Git追踪管理文件

在这里插入图片描述
也可以多次add 然后一次性commit

4.有关于打印提交日志的命令

git log
在这里插入图片描述
上述的commit ID 是经过哈希出来的值,可以定位到每次的提交,还有谁提交的和提交的细节

git log --pretty=oneline打印出一行漂亮的日志
在这里插入图片描述

5.验证.git文件的指针指向

在这里插入图片描述

6.Git管理的再理解——修改

Git比其他版本控制系统设计的优秀实际上因为Git跟踪并管理的是修改而不是文件内容本身

在这里插入图片描述

7.版本回退

如果有一天你发现之前的工作出现了很大的问题,需要在某个特定历史版本重新开始,这个时候就需要版本回退的功能。
命令

git reset [–soft | --mixed | --hard ] [HEAD]
--mixed 为默认选项,使用时不带参数默认为该选项 工作区不变,暂存区和版本库回退到某个指定版本
--soft 参数 对于工作区和暂存区不变,只将版本库回退到某个指定版本
--hard 工作区,暂存区和版本库都回退到某个版本
HEAD说明 可直接写成commit ID 表示指定退回版本
HEAD 表示当前版本(这个当前版本指的是版本库的版本,因为工作区和暂存区有可能和版本库中是不一样的)
HEAD^ 上一个版本
HEAD^^ 上上一个版本
依次类推.......
还可以用~数字表示:
HEAD~0 表示当前版本
HEAD~1 表示上一个版本
依次类推........

需要注意的是,hard参数慎用,因为如果有新功能的代码正在工作区,用–hard之后还未add的代码就找不到了

在这里插入图片描述
验证 --soft
在这里插入图片描述
验证 --mixed
在这里插入图片描述
--hard
在这里插入图片描述
上述用git log 查看时发现没有了最后修改的版本commit id 了,这个时候还可以用

git reflog 记录每一条提交命令
在这里插入图片描述

8.撤销修改

如果我们在工作区中写了很长时间的代码。越写越写不下去,觉得自己写的很垃圾,想要恢复上一个版本,有下列几种情况
撤销的目的是为了不影响远程仓库的代码,将本地仓库的代码推送到远程仓库需要push操作,所以下列撤销的条件都建立在没有push的前提下

1.情况一 对于工作区的代码,还没有add

可以直接考虑人工删除,但是不推荐,因为有时候开发了两三天,手动人工删除,有可能会导致出现新的语法错误。

git checkout – filename
在这里插入图片描述

2.情况二:已经add,但没有commit

git resest

上述的git reset默认参数是--mixed 将暂存区的内容退回为指定的版本,此时我们先将暂存区的内容回退,再用上面的checkout 命令即可将工作区也回退
在这里插入图片描述

3.情况三: 已经add 和commit

跟上述一样

git reset --hard HEAD^

即可,不过多赘述

4.删除版本库中已经提交的文件

可以现在工作区中删除,然后再add 和 commit 即可
也可以先git rm filename 再 commit 其中 git rm filename 的作用是将文件从暂存区和工作区中删除
在这里插入图片描述

9.分支管理

1.理解分支

什么是分支?
假设我有一个分身,十天之内,一个学习数据结构一个学习操作系统,那么十天之后,我算是既学会了数据结构又学会了操作系统。
在版本回退中,每次提交,Git都会把他们串成一条时间线,这条时间线就可以理解成一个分支,截止到目前为止,只有一条时间线,在Git里,这个分支叫做主分支即master 分支。
HEAD 严格来说不是指向提交的,而是指向master, master才是指向提交的,所以HEAD指向的就是当前分支
在这里插入图片描述
每提交一次,master分支都会向前移一步,这样,随着你不断提交,master分支的线也越来越长,而HEAD只要一直指向master分支即可指向当前分支
在这里插入图片描述

2.创建分支

查看当前本地所有分支

git branch

新建分支

git branch dev
在这里插入图片描述

3.合并分支

在这里插入图片描述
在这里插入图片描述

4.删除分支

合并完成后,分支对于我们来说就没有用了,因此dev分支就可以被删除掉了,注意如果当前正处于某分支下就不能删除当前分支。
git branch -d dev
在这里插入图片描述
此时的状态如下所示。
在这里插入图片描述
由于分支的创建,合并和删除非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

5.合并冲突

实际合并分支的时候,并不是想合并就合并的,有时候可 能会有代码冲突。

在这里插入图片描述

6.合并分支策略

上述的合并第一次合并没有冲突,第二次合并有冲突,两次合并分别对应了git的两种合并模式。分别时fast forward模式和非fast forward模式

1.ff模式

在这里插入图片描述
在这种Fast forward模式下,删除分支后,查看分支历史时,会丢掉分支信息,看不出来是最新提交是merge进来的还是正常提交的

1.非ff模式

上述合并冲突的状态如下所示
在这里插入图片描述
此时在删除分支之后是可以查看分支信息的,因为分支dev指向的并不是合并后的最新提交,而是指向其分支的最新提交
合并的时候增加这个--no--ff
在这里插入图片描述
该合并其实跟上述例子中的ff模式是一样的,都是没有冲突的,但是此时却可以通过git log 看出历史分支信息

7.分支策略

实际开发中,我们要遵循一下结果基本原则进行分支管理

首先:maste分支应该是稳定的,仅用来发布新版本,不能直接在master上修改代码,因此,修改的部分要在dev上,也就是说,dev分支是不稳定的,例如发布1.1版本,将dev分支上的代码合并到master上,然后在master分支上发布1.0版本,而我们开发人员就可以在dev分支上写代码了。因此,团队合作看起来就像下面一样的

在这里插入图片描述
下面列举几个具体的分支管理

1.bug分支

场景描述
假设我们正在dev分支上开发,开发到一半,突然master分支上有bug,此时我们不能直接在master分支上进行代码的修改,避免产生更大的bug,因此在Git中,每个bug都得有一个新的临时分支来进行修复,修复后合并再删除临时分支。
在这里插入图片描述

此时master已经合并了修改后的分支,dev指向的是开发分支。此时合并masterdev时,一定会有合并冲突,由于master主分支上放的是稳定版本的分支,所以此时我们要切换到dev开发分支然后并合并master分支,然后再切换回master分支再合并,此时就不会有合并冲突了。
在这里插入图片描述
在这里插入图片描述
合并dev状态图如下所示
在这里插入图片描述

2.删除临时分支

之前提到过的删除分支是
git branch -d xxx
但这个命令只能删除已经合并的分支,并不能删除已经提交但是未被master合并过的分支

场景: 产品经理需要添加一个功能,此时我们在master基础上创建一个新分支 dev2,开发了三天之后就被产品经理叫停了,此时dev2上的分支都被add 和 commit了 ,但是未合并,此时我们要删除分支的话只能用git branch -D xxx

场景模拟如下
在这里插入图片描述

三.Git远程操作

上述所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在自己的计算机上,而我们的Git是一个分布式版本控制系统!,什么意思?
简单理解为,我们每个人的电脑都是一个完整的版本库,这样在工作的时候就不需要联网了,因为版本库就是在自己的电脑上。而当一个人电脑坏掉了,可以从另外一个人那直接复制即可,在实际开发中,通常由一台充当中央服务器的电脑,这个服务器的作用仅仅是用来方便大家交换大家的修改,我们可以将新开发的功能推送(push)到这个中央服务器,同样也可以从中央服务器中pull(拉取)代码。
由于gitub是国外的网站,速度很慢,我用码云来托管

1.新建远程仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.克隆仓库

1.使用HTTPS克隆

git clone XXXXXXX链接
在这里插入图片描述
需要注意的时候克隆远程仓库的时候不能在任意一个本地仓库执行,也就是说不能在上述的gitcode仓库中执行
进入远程仓库,观察一下远程仓库发现和码云上的仓库完全一致
在这里插入图片描述
状态图如下所示
在这里插入图片描述
查看远程仓库
git remote
查看详细信息git remote -v
在这里插入图片描述

1.使用SSH协议克隆

1.将本地服务器的公钥放到Git服务器上进行管理

在这里插入图片描述

此时再Git上公钥数为0

在这里插入图片描述

上述错误中由于我们没有添加公钥到远端仓库中,服务器拒接了我们的clone连接,需要我们进行如下设置:
在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有
id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建
SSH Key:
创建好了公钥再将公钥添加到Git服务器上,再克隆链接即可

在这里插入图片描述

3.向本地仓库的修改推送到远程仓库

上述的操作add是将工作区的文件转移到暂存区,而commit是将暂存区的内容转移到版本库,操作完后都是在本地仓库中的,将本地版本库中的内容转移到远程仓库需要push,注意的是,本地仓库推送到远程仓库是分支与分支的联系,将本地分支上的某个内容推送到远程分支上
推送之前,需要注意的是我们本地Git配置的用户名和邮箱和gitee配置的一致,如何配置,我在前面已经赘述过了。

下面是我的配置,和我自身gitee的仓库是一致的

git config -l
user.email=2016982259@qq.com
user.name=zhang-juntong
push.default=matching
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=git@gitee.com:zhang-juntong/git-learning.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

git push <远程主机名> <本地分支名>:<远程分支名>
#如果本地分支名和远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>

必须先add commit 然后才能push

git add .
[zjt@VM-12-12-centos git-learning]$ git commit -m"测试能否推送到远程仓库"
[master 88fb68c] 测试能否推送到远程仓库
 1 file changed, 6 insertions(+)
 create mode 100644 test.cc
[zjt@VM-12-12-centos git-learning]$ git push origin master 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 390 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:zhang-juntong/git-learning.git
   5715613..88fb68c  master -> master

在这里插入图片描述
推送成功,由于我们使用的是SSH协议,是不用每一次推送都输入密码的,方便了我们推送操作,如果我们用的是HTTPS协议,必须每次输入用户名和密码,很麻烦。
这里需要提一下,我们克隆仓库的时候,本地的master 和远程的master是默认直接连接的

[zjt@VM-12-12-centos git-learning]$ git remote -v
origin	git@gitee.com:zhang-juntong/git-learning.git (fetch)
origin	git@gitee.com:zhang-juntong/git-learning.git (push)

此时表示有推送和拉取权限。

4.拉取远程仓库

多人协同开发时,有时远程仓库的版本比本地仓库版本新,此时需要我们拉取远程仓库。
我先直接在gitee仓库上修改,然后再拉取.

git pull <远程主机名> <远程分支名>:<本地分支名>
#如果远程分支是与当前分支合并,则冒号后面的部分可以省略
git pull <远程主机名><远程分支名>

在这里插入图片描述

5.配置忽略文件

在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,此时我们可以在Git工作区的目录下创建一个特殊的.gitignore文件,然后将需要忽略的文件名填进去,Git就会忽略这些文件

下面是我.gitignore初步内容

#可以直接些文件名 也可以直接*.so 表示忽略所有以.so结尾的文件
*.so
*.ini

先将.gitignore文件提交之后,再创建两个文件,分别是.so 和 .txt文件,发现能提交的此时只有.txt文件
在这里插入图片描述
当然也可以强制提交被忽略的文件

git add -f a.so 强制提交

在这里插入图片描述
在这里插入图片描述

也可以在.gitignore文件中操作
在这里插入图片描述
实际开发中可能文件太多,因此我们需要知道查询文件是如何被忽略的

[zjt@VM-12-12-centos git-learning]$ git check-ignore -v d.so
.gitignore:2:*.so	d.so

6.标签管理

标签tag是对某次commit的一个标识,相当于起了一个别名,例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样的表示来标识里程碑的意义。相较于难记住的commit id ,tag很好的解决了这个问题,因为其一定给人一个让人记住且有意义的名字,当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。

1.创建标签

创建标签 git tag [name]
查看标签 git tag
默认标签是打在最新提交的commit上的,如果要指定commit ,我们需要找到历史的commit id 然后接在tag 后面

[zjt@VM-12-12-centos git-learning]$ git tag v1.0
[zjt@VM-12-12-centos git-learning]$ git tag
v1.0
[zjt@VM-12-12-centos git-learning]$ cat .git/refs/tags/v1.0 
009df55b9a9811e909f6da7e313d0c3b5b61378c

在这里插入图片描述
发现此时标签指向的commit就是我们最新的commit

也可以对某个提交打上标签,不加commit id 默认对最新的提交打标签

[zjt@VM-12-12-centos git-learning]$ git tag v0.1 cacaf126803ca548bdfacdf697cb76229b062a75
[zjt@VM-12-12-centos git-learning]$ git tag
v0.1
v1.0

也可以对创建的标签添加备注信息,同理,后面不加commit id默认就是最新提交

[zjt@VM-12-12-centos git-learning]$ git tag -a v0.5 -m"测试标签备注 v0.5" 88fb68c
2.推送标签

推送标签

推送部分标签 git push origin v1.0
推送所有标签 git push origin --tags

[zjt@VM-12-12-centos git-learning]$ git push origin v1.0 v0.1  
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:zhang-juntong/git-learning.git
 * [new tag]         v1.0 -> v1.0
 * [new tag]         v0.1 -> v0.1

在这里插入图片描述

3.展示标签信息

git show [tag_name]

在这里插入图片描述

4.删除标签

在这里插入图片描述
在这里插入图片描述
可以看到是删除成功了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/818874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shell 脚本 if 判断使用方法

例如 1&#xff1a; shell if判断条件使用-n参数的使用 if [ -n $1 ] 当str非空的时候&#xff0c;为true if [[ -n $1 ]];then app_version$1 fi $1 不管我们是否传入参数&#xff0c;都是输出app_version$1 这行&#xff0c;也就是结果一直为true 例如 2&#xff1a; net…

CASS7.0裁剪面域图形

1、打开CASS7.0&#xff0c;绘制一个线状闭合图形&#xff0c;如下&#xff1a; 2、然后填充该线状地物&#xff0c;并删除线状地物&#xff0c;仅留下填充好的面域图形。如下&#xff1a; 3、恢复面域图形的边界线&#xff08;选中面域后&#xff0c;鼠标左键双击&#xff0c;…

Pytorch基础

文章目录 一、Pytorch简介二、安装2.1 安装GPU环境2.2 安装Pytorch2.3 测试 三、Tensor3.1 Tensor创建3.1.1 torch.tensor() && torch.tensor([])3.1.2 torch.randn && torch.randperm3.1.3 torch.range(begin,end,step)3.1.4 指定numpy 3.2 Tensor运算3.2.1 A…

mysql 非definer用户如何查看存储过程定义

当我们创建存储过程时&#xff0c;如果没有显示指定definer&#xff0c;则会默认当前用户为该sp的definer&#xff0c;如果没有相关授权&#xff0c;则其他用户是看不了这个sp的。 比如用户zhenxi1拥有如下权限&#xff1a; 它拥有对dev_nacos库的查询权限&#xff0c;这个时候…

流程节点图形变化

一、背景 &#xff08;1&#xff09;流程节点为矩形&#xff0c;只有上下左右四个连接点。 &#xff08;2&#xff09;支持移动&#xff0c;放大缩小&#xff0c;连接线。 二、需求 &#xff08;1&#xff09;流程节点支持图形变化。 &#xff08;2&#xff09;支持节点边框…

第7期ThreadX视频教程:如何实现RTOS高效的任务管理,抢占式调度,时间片调度和零中断延迟(2023-07-31)

视频教程汇总帖&#xff1a;https://www.armbbs.cn/forum.php?modviewthread&tid110519 本期视频为大家分享高效的RTOS任务管理设计&#xff0c;通过这个点来引出抢占式调度&#xff0c;时间片调度&#xff0c;任务优先级设置和零中断延迟。 RTOS任务高效管理是我们使用R…

吃透《西瓜书》第四章 决策树定义与构造、ID3决策树、C4.5决策树、CART决策树

目录 一、基本概念 1.1 什么是信息熵&#xff1f; 1.2 决策树的定义与构造 二、决策树算法 2.1 ID3 决策树 2.2 C4.5 决策树 2.3 CART 决策树 一、基本概念 1.1 什么是信息熵&#xff1f; 信息熵: 熵是度量样本集合纯度最常用的一种指标&#xff0c;代表一个系统中蕴…

Python小红书旋转验证码识别

本周免费接了一个用户的需求&#xff0c;研究了一下小红书旋转验证码。刚开始小瞧了它&#xff0c;觉得它应该没有百度旋转验证码那么难&#xff0c;毕竟图像没有干扰&#xff0c;需要的训练样本就可以很少。然而事情并没有这么简单&#xff0c;所以记录一下。 首先看一下最终…

代码随想录算法训练营第二天| 977. 有序数组的平方y,螺旋矩阵 II,209. 长度最小的子数组

977. 有序数组的平方y 思路&#xff0c;原数组是有序的&#xff0c;但是因为负数平方后可能变无序了&#xff0c;因此利用双指针遍历原数组&#xff0c;比较 nums[left]*nums[left]和nums[right]*nums[right]谁更大&#xff0c;然后对新数组赋值 class Solution {public int…

uni-table行点击事件

uni-app 如何点击表格的行跳转到对应的页面 找到uni-ui的源码&#xff0c;在源码里面绑定事件 用$emit发射事件 在你使用了uni-table的组件中接受改事件 然后绑定调用成功

在中国区部署日志通2.0

前提条件 一个域名&#xff1a;使用此域名来访问日志通控制台提供aws iam 的ssl证书 &#xff0c;而且必须跟域名相关联具有四个子网&#xff08;两个公有子网和两个私有子网&#xff09;和NAT网关的VPC 步骤 1.创建ACM证书 1.1 请求公有证书 1.2 配置域名 1.3 新申请的证书记…

Python自动化测试之函数知识讲解

一、前言 本文章主要讲解Python中的函数定义调用、参数分类、函数使用、作用域以及内置函数等内容&#xff0c;是函数专题讲解&#xff0c;这些都是python自动化学习中的基础哟&#xff0c;只有学好了基础才会有利于后面自动化的学习哟。这里我不多说废话了&#xff0c;直接进入…

GO学习之 多线程(goroutine)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 文章目录 GO系列前言一、并发介绍1.1 进程和线程和协程1.2 并发和并行 二、goroutine介绍三…

Android 中 app freezer 原理详解(二):S 版本

基于版本&#xff1a;Android S 0. 前言 在之前的两篇博文《Android 中app内存回收优化(一)》和 《Android 中app内存回收优化(二)》中详细剖析了 Android 中 app 内存优化的流程。这个机制的管理通过 CachedAppOptimizer 类管理&#xff0c;为什么叫这个名字&#xff0c;而不…

HTTP协议 和 HTTPS协议的区别(4点) HTTPS如何使用SSL/TLS协议加密过程 CA证书干啥的

&#xff08;一&#xff09;HTTP协议 和 HTTPS协议的区别&#xff08;4点&#xff09;&#xff1a; 1. HTTP协议的端口号是80&#xff0c; HTTPS协议的端口号是443 2. HTTP协议使用的URL是以 http:// 开头&#xff0c;HTTPS协议使用的URL是以https://开头 3. HTTP协议和HTTP…

Qt 中操作xml文件和JSON字符串

文章目录 1、概述1.1、xml介绍1.2、json介绍 2、xml文件增删改查2.1、写xml文件内容2.2、读xml文件内容2.3、删除xml文件内容2.4、修改xml文件内容 3、构建JSON字符串3.1、JSON字符串排版4、剪切板操作 1、概述 1.1、xml介绍 XML 指可扩展标记语言&#xff08;EXtensible Mark…

“效能指标”,该由谁来定义?| 谈效风生

第5期&#xff1a;效能指标&#xff0c;该由谁来定义&#xff1f; 回顾上期《「自动化」聊起来简单&#xff0c;做起来难》我们聊了聊如何打造「自动化」的事&#xff0c;这也是真正实现研发效能提升的必要条件。从单点自动化提升效率&#xff0c;到全工具链自动化&#xff0c;…

常微分方程建模R包ecode(二)——绘制相速矢量场

本节中我们考虑一个更为复杂的常微分方程模型&#xff0c; d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …

2023最新版本~十分钟零基础搭建EMQX服务器

购买服务器 已知服务器大厂商 1 阿里云 点击直接访问 2 华为云点击直接访问 3 腾讯云 点击直接访问 还是比较推荐大公司 不会跑路 这里我购买的是一年的华为云服务器(新用户 64一年) 镜像推荐乌班图18 登陆服务器&#xff08;需要重置密码&#xff01;&#xff01;&…

Ansible自动化运维工具 —— Playbook 剧本

playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Variables&#xff1a;变量 &#xff08;3&#xff09;Templates&#xff1a;模…