当前位置: 首页 > news >正文

Git(4)之基本工具

Git基础之基本工具

Author:onceday date:2023年3月5日

满满长路有人对你微笑过嘛…

windows安装可参考文章:git简易配置_onceday_CSDN博客

參考文档:

  • 《progit2.pdf》,Progit2 Github。
  • 《git-book.pdf》

文章目录

      • Git基础之基本工具
        • 1.选择修订版本
          • 1.1 引用日志
          • 1.2 提交区间
        • 2. 交互式提交
        • 3.储存文件
          • 3.1 清理工作目录
        • 4. 搜索内容
        • 5.修改提交
          • 5.1 修改历史提交信息
        • 6.重置文件
          • 6.1 压缩提交历史
        • 7.Rerere 重用记录的解决方案
        • 8. Git调试
          • 8.1 文件标注 blame
          • 8.2 二分查找
        • 9.打包

1.选择修订版本

每个提交对象有一个完整的40字符的SHA-1散列值,但是指定时并不需要填写完整的40个字符。

Git 十分智能,你只需要提供 SHA-1 的前几个字符就可以获得对应的那次提交, 当然你提供的 SHA-1 字符数量 不得少于 4 个,并且没有歧义——也就是说, 当前对象数据库中没有其它对象以这段 SHA-1 开头。

首先使用git log打印提交日志,然后确定目标提交的SHA-1值:

ubuntu->requests:$ git log
commit 1e62a3ec18e19f85ddae03b4cbbdf0b4c62834c0 (HEAD -> main, origin/main, origin/HEAD)
Merge: c57f1f0c 7908ad3a
Author: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
Date:   Fri Oct 21 11:37:47 2022 -0500Merge pull request #6262 from winmorre/docs-update/#6260JSONDecodeError included in the documentation
......

然后使用git show来展示:

ubuntu->requests:$ git show 1e62a3
commit 1e62a3ec18e19f85ddae03b4cbbdf0b4c62834c0 (HEAD -> main, origin/main, origin/HEAD)
Merge: c57f1f0c 7908ad3a
Author: Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
Date:   Fri Oct 21 11:37:47 2022 -0500Merge pull request #6262 from winmorre/docs-update/#6260JSONDecodeError included in the documentation

一般来说,如Linux内核这样庞大的项目,也仅需前12个字符就可以分辨,因此并不用输入完整的SHA-1字符串。

使用git log --abbrev-commit --pretty=online可以打印简单而唯一的值。

对于分支的顶端提交,直接使用git show <branch_name>即可查看顶端的提交信息。

通过git rev-parse <branch_name>可以看当前Git的分支所处的提交对象(提交对象)

1.1 引用日志

可以使用git reflog来查看引用日志。 Git 会在后台保存一个引用日志(reflog), 引用日志记录了最近几个月你的 HEAD 和分支引用 所指向的历史。

ubuntu->requests:$ git reflog
1e62a3ec (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: clone: from gitee.com:onceday/requests.git

然后可以使用@{n}来引用reflog中输出的提交记录。

git show HEAD@{5}

也可以使用同样的语法来查看某个分支在一定时间前的位置,例如查看master分支在昨天的时候指向了哪个提交:

git show master@{yesterday}

也可以使用git log -g来查看类似git log输出格式的引用日志信息。

^可以用来查看上一个提交,即祖先提交,下面命令即查看HEAD的父提交:

git show HEAD^  #cmd上可能需要使用HEAD^或者"HEAD^"

对于合并的提交可以用指定数字来查看第二个父提交:

git show HEAD^2

另外一种方法是使用波浪号~,同样指向第一父提交,因此HEAD~HEAD^是等价的,区别是HEAD~2代表第一父提交的第一父提交,即祖父提交。下面两种是等价的,^~也可嵌套使用:

git show HEAD~~ 
git show HEAD~2
1.2 提交区间

使用双点语法,可以让Git选择在一个分支中,而不在另一个分支中的提交:

git log master..experiment

上面语法的含义就是指出在experiment分支中而不在master分支中的提交。

除了双点语法外,还支持多点语法,如^branch--not branch指明不希望提交被包含其中的分支。

如下面的命令是等价的:

git log refA..refB
git log ^refA refB
git log refB --not refA

在此基础上,就可以指定多点查询了:

git log refA refB ^refC

上面即查看被refArefB包含,但不被refC包含的提交。

还存在一个三点语法,可以选择处被两个引用之一包含但又不被两者同时包含的提交。

git log --left-right master...experiment

--left-right会显示出每个提交到底处于那一侧的分支

2. 交互式提交

使用git add -i选项可以进入交互式暂存。具体详情请参考文档progit2

3.储存文件

使用git stash可以暂存正在开发的文件,从而能切换到新的分支上。

stash储存会清理工作目录的脏状态,跟踪文件的修改和暂存的改动,然后将未完成的修改保存到一个栈上,然后可以在任何时候重新应用这些改动,包括不同的分支。

使用下面命令即可:

  • git stash,可以将当前工作内容暂存。
  • git stash list,查看储存的内容。
  • git stash apply,应用最新储存的内容。
  • git stash apply stash@{2},指定应用目标存储,可以使用名字代替。
  • git stash drop {stash_name},移除指定的存储目标。
  • git stash pop {stash_name},应用储存并且从栈上丢弃。

stash可以储存未跟踪文件:

  • git stash -u,该选项会存储任何未跟踪文件,但不会包含明确忽略的文件。
  • git stash -a,包含所有文件,包括明确忽略的文件。

使用git stash branch <new branchname>,可以指定的分支名创建一个新分 支,检出贮藏工作时所在的提交,重新在那应用工作,然后在应用成功后丢弃贮藏

3.1 清理工作目录

清理工作目录有一些常见的原因,比如说为了移除由合并或外部工具生成的东西, 或是为了运行一个干净的构建而移除之前构建的残留。 需要谨慎地使用这个命令,因为它被设计为从工作目录中移除未被追踪的文件。 如果改变主意了,也不 一定能找回来那些文件的内容。 一个更安全的选项是运行git stash --all来移除每一样东西并存放在栈 中。

常用命令如下:

  • git clean,去除冗余文件,清理工作目录,只会移除没有忽略的未跟踪文件。
  • git clean -f -d,移除工作目录中所有未追踪的文件和空的子目录。
  • git clean --dry-rungit clean -n,只是输出需要移除的文件,但不会去真的移除文件。
  • git clean -x,移除那些明确被忽略的文件。
  • git clean -i,支持交互式操作。

4. 搜索内容

需要查看一个仓库代码的某个函数的变更历史,就需要使用搜索工具。

git grep,会查找工作目录。它的速度非常快,不仅仅可以可以搜索工作目录,还可以搜索任意的 Git 树。

git log支持的某些搜索向可以查找某个内容对象是什么时候存在和引入的。

  • git log -S XXXX_MAX --oneline,查看XXXX_MAX常量在哪个提交新增和删除的。
  • git log -S -G "reg" --oneline,支持正则表达式搜索。

使用git log -L :git_deflate_bound:zlib.c,可以查看zlib.c文件中git_deflate_bound函数的每一次变更。

5.修改提交

修改最后一次提交的提交信息,可以使用:

git commit --amend

上面这条命令会将最后一次的提交信息载入到编辑器中供你修改。 当保存并关闭编辑器后,编辑器会将更新后的提交信息写入新提交中,它会成为新的最后一次提交。

如果需要修改最后一次提交的实际内容,可按以下步骤:

  • 首先修改预期内容。
  • 然后暂存修改文件。
  • 最终使用git commit --amend,以新的改进暂存文件来提交旧友的最后一次提交。

修改提交会改变提交的SHA-1校验和,因此推送后的提交,就最好不要再修改了。

使用git commit --amend --no-edit可以跳过提交信息的编辑步骤。

5.1 修改历史提交信息

通过使用git rebase -i工具可以修改历史提交信息,详情可参考progit2书籍。

如,git rebase -i HEAD~3,将想要修改的最近一次提交的父提交作为参数传递给git rebase -i命令,其等价于下面形式:

git rebase -i HEAD~3..HEAD

即将从HEAD~3HEAD范围内的四个提交的信息进行改写,注意,最好不要对已推送到服务器的提交进行修改

git rebase会从旧到新的顺序依次重演这四次提交过程,因此便可以乘机修改每一次提交

当修改了目标提交信息后,需要依次输入git commit --amendgit rebase --continue,前者用于更新本次提交信息,后面用于自动应用剩下的提交。对于每一个需要修改的地方,Git都会停止,并且重复这个过程。

变基工具需要执行一个脚本,下面是脚本中有用信息的描述:

#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase
--continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

6.重置文件

这里介绍一下resetcheckout的区别,首先是三个存储区域:

  • HEAD,上一次提交的快照,下一次提交的父节点。
  • Index,预期的下一次提交的快照。
  • Working Directory,沙盒。

HEAD是当前分支引用的指针,它总是指向该分支的最后一次提交,这表示HEAD将是下一次提交的父节点。

Index是预期的下一次提交,即Git的暂存区。使用git ls-files -s即可查看暂存区文件信息。

工作目录是当前HEAD指向内容和Index内容,以及其他内容的融合体,是一个沙盒,在这里可以随意修改内容。

在这里插入图片描述

对于一个干净的工作区,首先在工作目录修改文件内容,然后使用git add暂存工作目录的修改文件,最后使用git commit提交暂存区的内容到git存储库中,此时HEAD的也会移向最新的提交。

对于切换分支或者克隆,当check out一个分支时,会修改HEAD指向新的分支引用,将索引填充为该次提交的快照,然后将索引的内容复制到工作目录中

对于reset操作,首先移动HEAD的指向,reset将当前分支的HEAD指针移到目标提交上。

对于git reset --soft,做完上面一步后,便停下了,并不会改变索引和工作目录

此时如果更新索引的内容,然后再git commit,其效果和git commit --amend的效果类似

对于git reset --mixed,会在--soft基础上进一步更改Index的内容,即撤销后续的提交,取消暂存所有的东西,但此时工作目录中还存在内容

对于git reset --hard,会在--mixed基础上进一步的修改工作目录中的内容,一旦覆盖那些未提交过的内容,那么将无法找回这些数据,因此该命令相当有危险性

可以给reset指定文件路径,这样会跳过移动HEAD分支的步骤,直接让索引(暂存区)的内容看起来像HEAD分支

git reset file.txt
git reset --mixed HEAD file.txt

也可以从指定提交中拉取数据git reset eeaabb file.txt。下面展示了resetcheckout命令对树的影响:

在这里插入图片描述

6.1 压缩提交历史

对于下面的提交历史,V2版本的文件只完成了部分工作,想把这个部分去掉,可以如下操作。

在这里插入图片描述

先运行git reset --soft HEAD~2,这个时候HEAD指针移到eb43bf8上,然后索引区的内容保持不变(即38eb946提交的内容),然后再git commit,这个时候就会把file-a.txt v3file-b.txt v1都提交上去,如下:

在这里插入图片描述

这样,就跳过了原来9e5e6a4提交了,且工作目录和索引区的内容保持不变,在提交历史中,V2的内容无法直接查询到了

7.Rerere 重用记录的解决方案

这是一个隐藏功能,能让Git记住解决一个块冲突的方法,这样在下一次看到相同冲突时,Git可以自动的解决它。

详情可以参阅progit2

8. Git调试

8.1 文件标注 blame

能显示任何文件中每行最后一次修改的提交记录。 所以,如果在代码中看到一个有 bug 的方法,可以使用git blame标注这个文件,查看哪一次提交引入了这行。

git blame -L 69,82 Makefile

上述命令确定Makefile中每一行分别来自哪个提交和提交者,使用-L选项将标注的输出限制为该文件的第69行到第82行。

8.2 二分查找

bisect 命令会对你的提交历史进行二分查找来帮助尽快找到是哪一个提交引入了问题。

一般步骤如下:

  • git bisect start,启动二分查找。
  • 测试代码,确定当前代码是否正常。
  • git bisect bad/good,告诉Git当前所在提交是否有问题。
  • 测试代码…
  • git bisect bad/good,告诉Git当前所在提交是否有问题。

依次迭代上面步骤后,就可以最终定位问题所在了。

在确定问题之后,需要使用git bisect reset重置HEAD指针到最开始的位置

9.打包

git bundle命令会将git push命令所传输的所有内容打包成一个二进制文件,然后可以通过物理手段传给其他人,并解包到其他仓库中。

ubuntu->cc:$ git bundle create repo.bundle HEAD master
Enumerating objects: 31, done.
Counting objects: 100% (31/31), done.
Compressing objects: 100% (27/27), done.
Total 31 (delta 6), reused 12 (delta 2), pack-reused 0

repo.bundle中包含所有重建该仓库master分支所需的数据。

HEAD添加了一个分支应用,这样在别处clone时可以直接从这个二进制文件中克隆出一个目录

使用git clone repo.bundle repo即可在他处重建该仓库。

可以只打包指定区间的提交内容:git bundle create commits.bundle master ^9a466c5

对于这样只打包了部分内容的包,需要先检查这个文件是否是一个合法的Git包,是否拥有共同的祖先来导入。如下:

git bundle verify ../commits.bundle

如果缺失必要的提交信息,那么就无法进行导入。

使用git bundle list-heads ../commits.bundle可以列出这些包里可以导入的分支。

还可以使用git fetchgit pull从包里导入提交。

git fetch ../commits.bundle master:other-master

可以只打包指定区间的提交内容:git bundle create commits.bundle master ^9a466c5

对于这样只打包了部分内容的包,需要先检查这个文件是否是一个合法的Git包,是否拥有共同的祖先来导入。如下:

git bundle verify ../commits.bundle

相关文章:

Git(4)之基本工具

Git基础之基本工具 Author&#xff1a;onceday date&#xff1a;2023年3月5日 满满长路有人对你微笑过嘛… windows安装可参考文章&#xff1a;git简易配置_onceday_CSDN博客 參考文档&#xff1a; 《progit2.pdf》&#xff0c;Progit2 Github。《git-book.pdf》 文章目录…...

好书推荐。

个人喜欢看传记&#xff0c;散文&#xff0c;历史等 二战名人传记&#xff0c;苏联列宁&#xff0c;朱可夫&#xff0c;斯大林等 英国首相丘吉尔&#xff0c;美国富兰克林&#xff0c;中国毛泽东等 创业&#xff1a;比尔盖&#xff0c;扎克伯格&#xff0c;苹果公司创始人乔…...

[Pytorch]DataSet和DataLoader逐句详解

将自己的数据集引入Pytorch是搭建属于自己的神经网络的重要一步&#xff0c;这里我设计了一个简单的实验&#xff0c;结合这个实验代码&#xff0c;我将逐句教会大家如何将数据引入DataLoader。 这里以目标检测为例&#xff0c;一个batch中包含图片文件、先验框的框体坐标、目标…...

【Kettle-佛系总结】

Kettle-佛系总结Kettle-佛系总结1.kettle介绍2.kettle安装3.kettle目录介绍4.kettle核心概念1.转换2.步骤3.跳&#xff08;Hop&#xff09;4.元数据5.数据类型6.并行7.作业5.kettle转换1.输入控件1.csv文件输入2.文本文件输入3.Excel输入4.XML输入5.JSON输入6.表输入2.输出控件…...

JavaSE网络编程

JavaSE网络编程一、基本概念二、常用类三、使用方法1、创建服务器端Socket2、创建客户端Socket3、创建URL对象JavaSE中的网络编程模块提供了一套完整的网络编程接口&#xff0c;可以方便地实现各种基于网络的应用程序。本文将介绍JavaSE中网络编程模块的基本知识、常用类以及使…...

9万字“联、管、用”三位一体雪亮工程整体建设方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用。部分资料内容&#xff1a; 1、 总体设计方案 围绕《公共安全视频监控建设联网应用”十三五”规划方案》中的总体架构和一总两分结构要求的基础上&#xff0c;项目将以“加强社会公共安全管理&#xff0c;提高…...

springboot自动装配原理

引言 springboot的自动装配是其重要特性之一&#xff0c;在使用中我们只需在maven中引入需要的starter&#xff0c;然后相应的Bean便会自动注册到容器中。例如&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spr…...

Docker学习(二十)什么是分层存储?

目录1.简介2.什么是 Union Mount&#xff1f;3.分层介绍1&#xff09;lowerdir 层&#xff08;镜像层&#xff09;2&#xff09;upperdir 层&#xff08;容器层&#xff09;3&#xff09;merged 层4.工作原理1&#xff09;读&#xff1a;2&#xff09;写&#xff1a;3&#xff…...

Vue组件进阶(动态组件,组件缓存,组件插槽,具名插槽,作用域插槽)与自定义指令

Vue组件进阶与自定义指令一、Vue组件进阶1.1 动态组件1.2 组件缓存1.3 组件激活和非激活1.4 组件插槽1.5 具名插槽1.6 作用域插槽1.7 作用域插槽使用场景二、自定义指令2.1 自定义指令--注册2.2 自定义指令-传参一、Vue组件进阶 1.1 动态组件 多个组件使用同一个挂载点&#x…...

僵尸进程与孤儿进程

概念 在 Unix/Linux 系统中&#xff0c;正常情况下&#xff0c;子进程是通过父进程创建的&#xff0c;且两者的运行是相互独立的&#xff0c;父进程永远无法预测子进程到底什么时候结束。当一个进程调用 exit 命令结束自己的生命时&#xff0c;其实它并没有真正的被销毁&#…...

基于注解@Transactional事务基本用法

关于概念性的放在最下面,熟读几遍 在使用时候也没多关注,总是加个Transactional 初识下 一般查询 Transactional(propagation Propagation.SUPPORTS) 增删改 Transactional(propagation Propagation.REQUIRED) 当然不能这么马虎 Spring中关于事务的传播 一个个测试,事…...

Go项目(商品微服务-2)

文章目录简介handler商品分类轮播图品牌和品牌与分类oss前端直传库存服务数据不一致redis 分布式锁小结简介 开发商品微服务 API 层类似的&#xff0c;将 user-web 目拷贝一份&#xff0c;全局替换掉 user-web修改 config 去掉不用的配置更新本地和远程 nacos 配置文件 把 pro…...

无头盔PICO-unity开发日记1(抓取、传送)

目录 可传送的地面 锚点传送 修改射线颜色&#xff08;可交互/不可交互&#xff09; 球、抓手组件 ||刚体&#xff08;重力&#xff09;组件 可传送的地面 1.地面添加组件 2.XR交互管理器添加传送提供者 3.地面设置传送提供者 4.XR交互管理器添加locomotion system 5.拖拽 完…...

Material3设计指南笔记

Material3设计指南笔记Table of Contents1. 颜色color1.1. 颜色分类1.2. 强调色accent color1.3. 中性色neutral color1.4. 辅助色additional color1.5. 调色盘tonal palettes1.6. 颜色规范2. z轴高度 elevation3. 图标 icon4. 动画 motion5. 形状 shape6. 字体1. 颜色color1.1…...

JavaWeb--会话技术

会话技术1 会话跟踪技术的概述2 Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3 Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session钝化与活化3.3.2 Session销毁目标 理…...

Git图解-为啥是Git?怎么装?

目录 零、学习目标 一、版本控制 1.1 团队开发问题 1.2 版本控制思想 1.2.1 版本工具 二、Git简介 2.1 简介 2.2 Git环境的搭建 三、转视频版 零、学习目标 掌握git的工作流程 熟悉git安装使用 掌握git的基本使用 掌握分支管理 掌握IDEA操作git 掌握使用git远程仓…...

HTML 框架

HTML 框架 <iframe>标签规定一个内联框架。 一个内联框架被用来在当前 HTML 文档中嵌入另一个文档。 通过使用框架&#xff0c;你可以在同一个浏览器窗口中显示不止一个页面。 iframe 语法&#xff1a; <iframe src"URL"></iframe> 该URL指向不同的…...

Rust特征(Trait)

特征(Trait) 特征&#xff08;trait&#xff09;是rust中的概念&#xff0c;类似于其他语言中的接口&#xff08;interface&#xff09;。在之前的代码中&#xff0c;我们也多次见过特征的使用&#xff0c;例如 #[derive(Debug)]&#xff0c;它在我们定义的类型(struct)上自动…...

详解七大排序算法

对于排序算法&#xff0c;是我们在数据结构阶段&#xff0c;必须要牢牢掌握的一门知识体系&#xff0c;但是&#xff0c;对于排序算法&#xff0c;里面涉及到的思路&#xff0c;代码……各种时间复杂度等&#xff0c;都需要我们&#xff0c;记在脑袋瓜里面&#xff01;&#xf…...

Vue+ECharts实现可视化大屏

由于项目需要一个数据大屏页面&#xff0c;所以今天学习了vue结合echarts的图标绘制 首先需要安装ECharts npm install echarts --save因为只是在数据大屏页面绘制图表&#xff0c;所以我们无需把它设置为全局变量。 可以直接在该页面引入echarts&#xff0c;就可以在数据大…...

百度Apollo规划算法——轨迹拼接

百度Apollo规划算法——轨迹拼接引言轨迹拼接1、什么是轨迹拼接&#xff1f;2、为什么要进行轨迹拼接&#xff1f;3、结合Apollo代码为例理解轨迹拼接的细节。参考引言 在apollo的规划算法中&#xff0c;在每一帧规划开始时会调用一个轨迹拼接函数&#xff0c;返回一段拼接轨迹…...

6. unity之脚本

1. 说明 当整个游戏运行起来之后&#xff0c;我们无法再借助鼠标来控制物体&#xff0c;此时可以使用脚本来更改物体的各种姿态&#xff0c;驱动游戏的整体运动逻辑。 2. 脚本添加 首先在Assets目录中&#xff0c;新创建一个Scripts文件夹&#xff0c;在该文件内右键鼠标选择…...

flink-note笔记:flink-state模块中broadcast state(广播状态)解析

github开源项目flink-note的笔记。本博客的实现代码都写在项目的flink-state/src/main/java/state/operator/BroadcastStateDemo.java文件中。 项目github地址: github 1. 广播状态是什么 网上关于flink广播变量、广播状态的讲解很杂。我翻了flink官网发现,实际上在1.15里面…...

vue——预览PDF

下载插件 npm install --save vue-pdf创建组件 <template><div class"ins-submit-docs-content ins-submit-docs-pdf"><div v-if"loading" style"position: absolute; top: 40%; width: 100%;text-align: center;"><el-l…...

数据库复习

什么是数据库系统 数据库系统是指在计算机系统中引入数据库后构成的系统&#xff0c;一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成 数据库系统的特点是什么&#xff1f; 数据结构化数据的共享性高&#xff0c;冗余度低且易扩充数据独立性高数…...

vscode插件推荐

文章目录前言一、vscode插件推荐&#xff1f;1、 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code2、Auto Close Tag3、Auto Import3、Error Lens4、vscode-icons5、ES7 React/Redux/React-Native snippets6、GitLens — Git supercharged7、JavaScript…...

THUPC2023初赛总结

今天参加了THUPC2023初赛&#xff0c;感觉还行。 比赛本来是11:00-16:00&#xff0c;但出了点问题&#xff0c;比赛延迟了十分钟。 刚开始&#xff0c;我从第一题往后看&#xff0c;寻找简单的题。 过了一会儿&#xff0c;一看排行榜&#xff0c;怎么最后一题全是绿的&#…...

unity知识点小结02

虚拟轴 虚拟轴就是一个数值在-11内的轴&#xff0c;这个数轴上重要的数值就是-1,0和1。当使用按键模拟一个完整的虚拟轴时需要用到两个按键&#xff0c;即将按键1设置为负轴按键&#xff0c;按键2设置为正轴按键。在没有按下任何按键的时候&#xff0c;虚拟轴的数值为0&#xf…...

总线(四)Modbus总线 协议

文章目录Modbus技术背景Modbus OSI分布Moudbus分类通讯过程Moudbus协议通信过程以及报文解析RTU 与 ASCII 收发数据区别Modbus技术背景 Modbus是一种串行通信协议。 1971年&#xff0c;Modicon公司首次退出Modbus协议&#xff0c;ModbusRTU和Modbus ASCII诞生于此。 后来施耐德…...

Cadence Allegro 导出Component Report详解

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,Component Report作用3,Component Report示例4,Component Report导出方法4.1,方法14,2,方法2B站关注“硬小二”浏览更多演示视频 1,...