【Git】万字详解 Git 的原理与使用(上)

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

在这里插入图片描述

文章目录

  • 1. 初识 Git
    • 1.1 Git 是什么?
    • 1.2 为什么要有 Git
  • 2. 安装 Git
    • 2.1 Linux-Ubuntu 安装 Git
    • 2.2 Windows 安装 Git
  • 3. Git 初始化与配置
    • 3.1 创建 Git 本地仓库
    • 3.2 配置 Git
    • 3.3 查看配置
    • 3.4 删除配置
  • 4. Git 工作流程 - 认识工作区、暂存区、版本库
  • 5. Git 基本操作
    • 5.1 添加文件
      • 5.1.1 场景一
      • 5.1.2 场景二
    • 5.2 查看.git文件
      • 【可能遇到的问题】 Windows下的 Git Bash 环境下并没有安装 tree工具
    • 5.3 修改文件
    • 5.4 版本回退
    • 5.5 撤销修改
      • 5.5.1 情况一:对于工作区代码还未 add
      • 5.5.2 情况二:已经 add,但没有 commit
      • 5.5.3 情况三:已经 add,并且 commit 了
    • 5.6 删除本地仓库中的文件

1. 初识 Git

1.1 Git 是什么?

Git 是一个开源的分布式版本控制系统,用于高效地跟踪和管理项目代码的变更历史(不仅仅是代码,还有其它格式也是可以的~)

1.2 为什么要有 Git

在学习或者是工作的时候,比如编写各种文档,为了防止文档丢失,更改失误,我们不得不复制出一个副本,保留历史记录,方便找回历史记录,比如:

“设计文档-v1”
“设计文档-v2”
“设计文档-v3”
“设计文档-确定版”
“设计文档-最终版”

每个版本有各自的内容,但最终会只有⼀份文档是需要被使用的,在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,文件就越来越多,不仅文件多,更重要的是,随着版本数量的不断增多,我们可能记不太清每一个版本具体修改的哪些内容,文档如此,我们编写的项目代码也如此!

在这里插入图片描述

那么,如何解决呢?

答:版本控制器 ,记录每次修改以及版本迭代的一个管理系统,目前,最主流的版本控制器就是 Git,可以控制电脑上所有格式的文件

为了能够更方便管理这些不同版本的⽂件,便有了版本控制器! 所谓的版本控制器,就是能让你了解到⼀个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也方便多人协同作业,目前最主流的版本控制器就是 Git,Git 可以控制电脑上所有格式的文件,例如doc、excel、dwg、dgn、rvt等等,对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件!

注意事项
所有的版本控制系统,Git也不例外,其实只能跟踪文本文件的改动,比如 txt文件,网页,所有的程序代码等等,版本控制系统可以告诉你每次的改动,比如在第10行加了"name",在第12行删除了一个"Windows",而图片、视频等这些二进制文件,虽然也能由版本控制系统管理,但没办法跟踪文件的变化,只能把⼆进制文件每次改动串起来,即只知道图片从90KB改成了100KB,但到底改了啥,版本控制系统无法记录,所有并不知道,也没法知道~

在这里插入图片描述

2. 安装 Git

接下来,我们来进行实操!安装 Git ~

Git 是开放源代码的代码托管工具,最早是在 Linux 下开发的,当然,最开始也只能应用于 Linux 平台,后面慢慢的被移植到 Windows下,现在 Git 可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行了~

2.1 Linux-Ubuntu 安装 Git

这里介绍 Ubuntu 下的安装(因为 Centos 现在不维护了~,因此,本文不作过多介绍)

在 Ubuntu 安装 git 相当简单~ 一起来看看!

  1. 首先查看系统有没有安装过 Git,输入命令:git --version
  • 如果出现 git 版本号已经安装:
    在这里插入图片描述
  • 如果出现这类提示,则没安装
Command 'git' not found, but can be installed with:
sudo apt install git
  1. 没有则进行安装,输入安装命令:sudo apt-get install git -y(在安装过程中,出现了图形化界面,回车即可~)
    再次输入 git --version,就可以看到 git 版本号啦!此时,安装完成!(是不是非常简单!)

2.2 Windows 安装 Git

Git 官网直接下载:Git 下载官网

  1. 选择 Windows 操作系统

在这里插入图片描述

  1. 根据自己的电脑选择相应的下载

在这里插入图片描述

  1. 下载完成后,找到下载到的文件,进行双击进行安装
    在这里插入图片描述

  2. 接着,按照指示,一步步安装~

非常简单的~ 按照指示点下一步就好啦(勇敢牛牛,不怕困难!)

  1. 检测是否安装好 Git,打开 Git Bash

在这里插入图片描述

输入:git -- verison,出现对应安装的 git 版本号,就是安装成功啦!!!
在这里插入图片描述

3. Git 初始化与配置

Git 的安装是很简单的,现在我们来看看 Git 的初始化与配置~

3.1 创建 Git 本地仓库

可以将仓库理解成是进行版本控制的一个文件目录,如果我们想要对文件进行版本控制,就必须先创建一个仓库出来!

创建⼀个 Git 本地仓库对应的命令为 git init ,注意命令要在文件目录下执行,例如:

  1. 首先找到自己想要的文件目录~

在这里插入图片描述

  1. 右键,找到选项【Git Bash Here】 ,进入界面,输入仓库初始化命令

在这里插入图片描述

我们就会发现,当前目录下多了一个.git 的隐藏文件,.git 目录是 Git 用来跟踪管理仓库的,千万不要手动修改里面的文件!!! 如果修改了,很容易乱,就会把 Git 仓库给破坏了~(感兴趣的小伙伴,可以点击进行详细了解哦)

3.2 配置 Git

当安装 Git 后首先要做的事情就是设置你的用户名称和 e-mail 地址,这是非常非常重要的,配置命令为:

git config [--global] user.name "Your Name" 
git config [--global] user.email "email@example.com" # 把 Your Name 改成你的用户名
# 把 email@example.com 改成你的邮箱的格式,只要格式正确即可

示例:

git config [--global] user.name "xxx" 
git config [--global] user.email "1234567@163.com" 

注意 --global 是⼀个可选项,如果使用了该选项,就表示这台机器上所有的 Git 仓库都会使用这个配置,如果你希望在不同仓库中使用不同的 name 或 e-mail ,即可以不要 --global 选项,但需要注意的是,执行命令时必须要在仓库里面~

3.3 查看配置

查看配置命令:git config -l

在这里插入图片描述

3.4 删除配置

删除对应的配置命令如下:

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

4. Git 工作流程 - 认识工作区、暂存区、版本库

  • 工作区:是在电脑上要写的代码或者是文件的目录

  • 暂存区(stage/index):一般存放在 .git 目录下的 index 文件(.git/index)中,把暂存区有时也叫作索引(index)

  • 版本库(repository):也叫仓库,工作区有⼀个隐藏目录 .git ,它不算工作区,而是 Git 的版本库,这个版本库里面的所有文件都可以被 Git管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"

在这里插入图片描述

  • 左侧为工作区,右侧为版本库,Git 的版本库里存放了很多东西,其中最重要的是暂存区
  • 在创建版本库的时候, Git 会自动为我们自动创建一个唯一的 master 的分支,以及指向 master 的一个指针 HEAD (分支与HAED后续介绍)
  • 当对工作区修改或者是新增的文件,执行 git add 命令,暂存区目录树的文件索引会被更新
  • 当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中

Git 工作流程:

  1. 工作区:开发者实际编辑代码的目录
  2. 暂存区:通过 git add 将修改添加到暂存区,准备提交
  3. 本地仓库(Local Repository):通过 git commit 将暂存区的修改保存到本地仓库,生成一个提交记录(上述介绍的是本地仓库)
  4. 远程仓库(Remote Repository):通过 git push 将本地提交推送到远程仓库,如Gitee、GitHub(后续介绍如何连远程仓库)

5. Git 基本操作

(碎碎念:笔者每次都喜欢先看到命令集合,有啥先用啥,之后再慢慢了解原理,因此,这里先介绍几个常用的命令,方便查找~同时,笔者后续内容均基于 Windows 11 系统展示操作)

命令作用
git init初始化一个Git仓库
git clone 克隆远程仓库到本地
git status查看当前仓库状态
git log查看历史提交记录
git reflog记录本地的每⼀次命令
git add 添加文件到暂存区
git commit -m “msg”提交修改到本地仓库
git push origin main推送到远程仓库的main分支
git pull origin main从远程仓库拉取最新代码
git branch查看分支
git checkout 切换分支
git merge 合并分支
git reset版本回退

5.1 添加文件

5.1.1 场景一

在包含.git 的目录下新建⼀个 Read 文件,

  1. 可以使用 git add 命令可以将文件添加到暂存区:
  • 添加⼀个或多个文件到暂存区: git add [file1] [file2] ...

  • 添加指定目录到暂存区,包括子目录: git add [dir]

  • 添加当前目录下的所有文件改动到暂存区: git add .

  1. 再使用 git commit 命令将暂存区内容添加到本地仓库中:
  • 提交暂存区全部内容到本地仓库中: git commit -m "message"

  • 提交暂存区的指定文件到仓库区: git commit [file1] [file2] ... -m "message"

注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的 message,由用户自己完成,这部分内容千万不能省略,并且要好好描述,这是记录提交的细节,方便自己看也是方便别人看的~(不好好描述,自己和别人都不好理解哦!)

示例:

在这里插入图片描述
git commit 命令执行成功后会告诉我们,1个文件被改动,就是我们新添加的 Read 文件,插入了一行内容,Read 有一行内容

也可以多次 add 不同的⽂件,而只 commit ⼀次便可以提交所有文件,是因为需要提交的文件是通通被 add 到暂存区中,然后⼀次性再commit暂存区的所有修改,如下:

在这里插入图片描述
这样就一次性将暂存区的三个文件都提交了~

可以使用 git log 命令,来查看历史提交记录:可以看到刚刚提交的两次记录
在这里插入图片描述
git log 命令显示从最近到最远的提交⽇志,并且可以看到我们 commit 时的日志消息,如果觉得输出信息太多,可以加上 --pretty=oneline 参数,即 git log --pretty=oneline,日志更加简单,可以清楚了解~

5.1.2 场景二

为了更深刻理解工作区、暂存区、版本库,这里再展示一种场景,如下:

在这里插入图片描述
提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-) ,只有⼀个文件改变了,但是,我们新增了两个文件呀!
仔细观察, git add 是将文件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中。在上述命令,并没有使用 git add file5 ,file5 就不在暂存区中维护,因此,commit 的时候其实只是把已经在暂存区的 file4 提交了,遗漏了工作区的 file5,那如何提交 file5 呢?很简单,再次 git add file5 , commit 即可~

所以,有时候你 commit 了,结果该内容并没有提交,需要排查一下是否将这个内容添加到了暂存区哦~

5.2 查看.git文件

首先,我们来看看 .git 的目录结构,进入 .git 文件(注意,是点击进入.git隐藏文件哦!),使用命令:tree,查看树形结构

如下:这是没有任何提交记录的哦~

在这里插入图片描述
在上一小节中,我们添加了文件,再添加文件后,我们再来观察 .git 文件的树形结构

在这里插入图片描述

总结】在本地的 git 仓库中,有几个文件或者目录很特殊:

  • index: 暂存区, git add 后会更新该内容
  • HEAD: 默认指向 master 分支的⼀个指针
  • refs/heads/master: 文件里保存当前 master 分支的最新 commit id
  • objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改

小建议】:在后面的学习过程中,我们最好能将常见的 git 操作与 .git 目录当中的结构内容变化对应起来,这样有利于我们理解 git 细节流程

【可能遇到的问题】 Windows下的 Git Bash 环境下并没有安装 tree工具

问题:如果出现 bash: tree: command not found ,则说明在 Windows下的 Git Bash 环境下并没有安装 tree工具,因此,导致无法使用

在这里插入图片描述
解决方式:git bash 默认是没有 tree 命令的!下载 tree

  1. 下载

在这里插入图片描述

  1. 解压,在 bin 目录下找到 tree.exe

在这里插入图片描述
3. 将 tree.exe 拷贝到 git bash 的应用程序位置,找到自己的 git安装路径\usr\bin

在这里插入图片描述

  1. 再次输入 tree 命令,即可:

在这里插入图片描述

5.3 修改文件

Git 比其他版本控制系统设计得优秀,是因为 Git 跟踪并管理的是修改,而并非文件,就比如新增了一行内容,这就是⼀个修改,删除了一行内容,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,同样是⼀个修改!

现在对 Read 文件,进行修改,通过 git status,查看上次提交之后是否有对文件进行再次修改
(注意仓库中的 Read 和 工作区的 Read 是不同的,我们这里是在工作区进行修改的!通过 git status,查看当前仓库的状态)

在这里插入图片描述
图中结果显示,Read 已经被修改过,但是还没有完成添加与提交,目前,只知道文件被修改了,但是不知道具体哪些地方被修改了!(知道这个是很重要的!)

使用 git diff [file] 命令用来显示暂存区和工作区文件的差异,也可以使用 git diff HEAD -- [file] 命令来查看版本库和工作区文件的区别,知道了对 Read 做了什么修改后,再把它提交到本地仓库就会放心许多!

在这里插入图片描述
使用 add 添加到暂存区,再 commit 提交到本地仓库~

在这里插入图片描述

5.4 版本回退

我们知道,Git 能够管理文件的历史版本,这也是版本控制器最重要的能力,如果想在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能~ 执行回退版本命令: git reset
可以指定退回某⼀次提交的版本,注意,"回退"本质是要将版本库中的内容进行回退,⼯作区或暂存区是否回退由命令参数决定!

git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]

  • --mixed 为默认选项,使用时可以不带该参数,该参数是将暂存区的内容退回为指定提交版本内容,而工作区文件保持不变

  • --soft 该参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本

  • --hard 参数将暂存区和工作区都退回到指定版本,切记!!!工作区有未提交的代码时千万不要使用这个命令,因为工作区会回滚,没有提交的代码就再也找不回了,因此,使用这个参数的时候,一定要慎重

  • HEAD 可直接写成 commit id,表示指定退回的版本,也可以这样写:

写法1:使用 ^

HEAD 表示当前版本
HEAD^ 表示上⼀个版本
HEAD^^ 表示上上⼀个版本
以此类推…

写法2:可以使用 ~ 数字表示

HEAD~0 表示当前版本
HEAD~1 表示上⼀个版本
HEAD~2 表示上上⼀个版本
以此类推…

示例:为了方便演示回退功能,先做一些准备工作,更新 3 个版本的 Read,并进行 3 次提交,准备工作如下:

在这里插入图片描述
操作一】提交 version3 后,发现 version3 编写有误,想回退到 version2,重新基于 version2 开始写,这里希望工作区的内容也回退到 version2 版本,因此需要 --hard 参数,如下:

在这里插入图片描述
可以看到 Read 文件的内容,已经回退到 version2 了,使用 git log 查看提交⽇志,也发现 HEAD 指向了 version2

操作二】后悔回退到 version2,想再回到 version3

可以继续使用 git reset 命令,回退到 version3 版本,but 我们必须要拿到 version3 的 commit id 去指定回退的版本,从上图中,看到 git log 并不能打印出 version3 的 commit id ,如果运气好的话,可以在终端找之前的记录,运气不好的话,commit id 已经被我们搞丢啦,不过不用担心!Git 还提供了⼀个 git reflog 命令,可以补救⼀下,该命令用来记录本地的每⼀次命令!!!

在这里插入图片描述
使用git reflog 可以很方便找到所有操作记录,但 e9980d9 是什么呢?是 version3 的 commit id 的部分,Git 版本回退的时候,也可以使用部分 commit id 来代表目标版~

操作三】在实际开发中,由于长时间开发,导致 commit id 早就找不到了,但是又想回到 version3,貌似现在不可能~

我们要知道 Git 版本回退速度非常快,因为 Git 在内部有个指向当前分支,这里是 HEAD 指针默认指向 master 分支,在.git 隐藏文件中refs/heads/master 文件里面保存了当前 master 分支的最新 commit id,当我们在回退版本的时候, Git 仅仅是给 refs/heads/master 中存储⼀个特定的 version,可以简单理解为下图:

在这里插入图片描述

可以查看 refs/heads/master 文件内容,保存了最新的 commit id,如下:

如果是操作二,回退到 version3 版本,则保存的 commit id 为 version3 的:

在这里插入图片描述
如果是操作一,回退到 version2 版本,则保存的 commit id 为 version2 的:

在这里插入图片描述

5.5 撤销修改

有一种场景,比如在工作区写了很久的代码,但是越写越写不下去,觉得自己写得不太好,想恢复到上⼀个版本~ 我们需要撤销修改,这里分三种情况:

5.5.1 情况一:对于工作区代码还未 add

操作一】可以直接删除目前在工作区中新增的代码(不推荐),如下:

在这里插入图片描述
万幸!才写了一行内容,就发现需要删除了,万一写了很多,一直都没有提交,可能都忘记自己新增的哪些内容了,那如何删除呢?

Git 为我们提供了更好的方式!!!

操作二】使用 git checkout -- [file] 命令,使工作区文件回到最近一次 add 或者是 commit 状态(注意,该命令中的 -- 千万不能省略,省略就变成其它意思了!!!)

在这里插入图片描述

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

add 了,保存到了暂存区,如何撤销呢?

还记得刚介绍的 git reset 回退命令嘛!! 该命令使用 --mixed 参数,则可以将暂存区的内容回退到指定版本的内容,工作区文件保持不变,这样,我们就可以回退暂存区的内容了~

命令:git reset HEAD Read (注意,这里为啥没有带上 --mixed 参数呢?因为 --mixed 参数是默认的!!!)

在这里插入图片描述

5.5.3 情况三:已经 add,并且 commit 了

这种情况也无需担心,使用 git reset --hard HEAD^ 回退到上一个版本

不过这里是有条件的,即还没有将自己本地版本库推送到远程!!!(一旦推送到远程版本库,那就…)

在这里插入图片描述

5.6 删除本地仓库中的文件

在 Git 中,删除也是一个修改操作

下面演示删除 file4 文件:

使用 rm file4

在这里插入图片描述

这样直接删除是没有用的,此时只是删除了工作区的 file4,git status 会告诉你哪些文件被删除了,但是,这个时候,工作区和版本库就不一致了,要删除文件,除了要删除工作区的文件,还要清除版本库的文件

到这里,有两种情况:

情况一确实需要从版本库删除该文件

使用 git rm [文件名],将文件从工作区和暂存区中删除,并且 commit ~

在这里插入图片描述

情况二删错了

使用 git checkout -- file4 来恢复, 删除也是修改哦,这是刚刚学过的命令~

在这里插入图片描述

这期 git 内容介绍到这里,可以自己动手操作,加深印象哦~

💛💛💛本期内容回顾💛💛💛

在这里插入图片描述
✨✨✨本期内容到此结束啦~

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

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

相关文章

【原创开发】无印去水印[特殊字符]短视频去水印工具[特殊字符]支持一键批量解析

支持:快手,抖音,小红书,哔哩哔哩,等多款应用去水印,支持图集解析下载 【应用名称】:无印 【应用版本】:1.3 【应用大小】:17M 【测试机型】:小米14 【下载链…

qemu(3) -- qemu-arm使用

1. 前言 qemu中有很多的特技,此处记录下qemu-arm的使用方式,简单来说qemu-system-xx用于虚拟整个设备,包括操作系统的运行环境,而qemu-xx仅虚拟Linux应用程序的环境,不涉及操作系统,应用程序的系统调用有宿…

Docker的简单使用(不全)

Docker Hello World Docker 允许在容器内运行应用程序,使用docker run命令来在容器内运行一个应用程序 输出Hello World runoobrunoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"Hello world docker:Docker的二进制执行文件 run…

SALOME源码分析: 命令系统

本文分析SALOME中命令系统,涉及的知识点包括, MDF框架数据对象模型 注1:限于研究水平,分析难免不当,欢迎批评指正。注2:文章内容会不定期更新。 一、命令对象 1.1 Class Hierarchy 1.2 SUIT_Operation #…

Bootstrap(自助法)​​:无需假设分布的统计推断工具

核心思想​​ Bootstrap 是一种​​重采样(Resampling)技术​​,通过在原始数据中​​有放回地重复抽样​​,生成大量新样本集,用于估计统计量(如均值、方差)的分布或模型性能的不确定性。 ​​…

沙箱逃逸(Python沙盒逃逸深度解析)

沙箱逃逸(Python沙盒逃逸深度解析) 一、沙盒逃逸的核心目标 执行系统命令 通过调用os.system、subprocess.Popen等函数执行Shell命令,例如读取文件或反弹Shell。 文件操作 读取敏感文件(如/etc/passwd)、写入后门文件…

融智学数学符号体系的系统解读(之一)

融智学数学符号体系的系统解读 一、道函数(Dao Function) 数学表达式: f(x,y,z)0(狭义) f(x,y,z,ict)0(广义) 符号解析: x: 形象思维坐标轴 数学意义: 表征基于感官输入的多模…

Java 中使用正则表达式

1. 引入包 在使用正则表达式之前,需要引入包: import java.util.regex.Matcher; import java.util.regex.Pattern; 2. 常用模式规则 元字符 :这些是正则表达式中的特殊字符,用于匹配特定的模式。 . :匹配任意单个字符(换行符除外)。例如,a.b 可以匹配 "acb&quo…

cat file.tar.gz | tar -xzf - -C /target/dir两个减号之间为什么有个空格?是写错了吗?(管道命令后续)

在 tar 命令的参数 -xzf - -C 中,两个减号(-)之间的空格是故意保留的语法,没有写错。具体原因如下: 1. -xzf - 的语法解析 -xzf 是 tar 命令的组合参数: x:表示解压(extract&#x…

Linux中的系统延时任务和定时任务与时间同步服务和构建时间同步服务器

延时任务 在系统中我们的维护工作大多数时在服务器行对闲置时进行 我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的,不会重复执行 当延迟任务产生输出后,这些输出会以邮件的形式发送给延迟任务发起者 在RHEL9中默认系统中的所有普通…

C++之IO流

目录 一、C语言的输入与输出 二、流是什么 三、CIO流 3.1、C标准IO流 3.2、C文件IO流 四、stringstream的简单介绍 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放…

Fedora升级Google Chrome出现GPG check FAILED问题解决办法

https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0x7FAC5991)已安装 https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0xD38B4796)已安装 仓库 "google-chrome" 的 GPG 公钥已安装,但是不适用于此软件包。 请检查此仓库的…

极光PDF编辑器:高效编辑,轻松管理PDF文档

在日常工作和学习中,PDF文件的使用越来越普遍。无论是学术论文、工作报告还是电子书籍,PDF格式因其稳定性和兼容性而被广泛采用。然而,编辑PDF文件往往比编辑Word文档更加复杂。今天,我们要介绍的 极光PDF编辑器,就是这…

MySQL进阶(一)

一、存储引擎 1. MySQL体系结构 连接层: 最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限 服务层: 第二层架构主要完成大多数的核心服务…

OpenCV 图形API(67)图像与通道拼接函数-----水平拼接(横向连接)两个输入矩阵(GMat 类型)函数concatHor()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于水平拼接两个 GMat 矩阵,要求输入矩阵的行数必须一致: GMat A { 1, 4,2, 5,3, 6 }; GMat B { 7, 10,8, 11,9, 12 }; GM…

1.1 点云数据获取方式——引言

图1-1-1点云建筑场景图 点云数据是指能够描述外部场景、对象表面的三维空间位置,并具有相关属性的点集,其每个离散点通常包括三维空间位置(x,y,z)以及强度、颜色等属性信息。大量分布的离散点集能够清晰而直接地描绘场景、对象的3…

[Verilog]跨时钟域数据传输解决方案

跨时钟域数据传输解决方案 摘要:跨时钟域数据传输 (Clock Domain Crossing, CDC) 是 SoC 设计中常见且关键的问题,因为现代 SoC 通常包含多个时钟域,不同模块可能运行在不同频率或相位的时钟下。跨时钟域传输数据时,如果处理不当,可能会导致亚稳态 (Metastability)…

Kotlin与Jetpack Compose的详细使用指南

Kotlin与Jetpack Compose的详细使用指南,综合最新技术实践和官方文档整理: 一、环境配置与基础架构 ‌项目创建‌ 在Android Studio中选择Empty Compose Activity模板,默认生成包含Composable预览的MainActivity2要求Kotlin版本≥1.8.0&…

预订接口优化:使用本地消息表保证订单生成、库存扣减的一致性

🎯 本文介绍了一种优化预订接口的方法,通过引入本地消息表解决分布式事务中的最终一致性问题。原先的实现是在一个事务中同时扣减库存和创建订单,容易因网络不稳定导致数据不一致。改进后的方法将业务操作和消息发送封装在本地事务中&#xf…

计算机网络——客户端/服务端,URI与URL的区别,以及TCP/IP核心机制全解析

文章目录 客户端/服务端,URI与URL的区别,以及TCP/IP核心机制全解析一、客户端/服务端通信模型概述二、URI 与 URL 的概念与区别1. URL(统一资源定位符)2. URI(统一资源标识符)3. URI 与 URL 的关系 三、SYN…