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

版本控制系统Git学习笔记-Git分支操作

文章目录

  • 概述
  • 一、Git分支简介
    • 1.1 基本概念
    • 1.2 创建分支
    • 1.3 分支切换
    • 1.4 删除分支
  • 二、新建和合并分支
    • 2.1 工作流程示意图
    • 2.2 新建分支
    • 2.3 合并分支
    • 2.4 分支示例
      • 2.4.1 当前除了主分支,再次创建了两个分支
      • 2.4.2 先合并test1分支
      • 2.4.3 合并testbranch分支
    • 2.5 解决合并时的冲突
  • 三、分支管理
    • 3.1 查看所有分支列表
    • 3.2 查看每一个分支的最后一次提交
    • 3.3 查看已经合并或尚未合并到当前分支的分支
  • 四、远程分支
    • 4.1 获取远程分支
    • 4.2 推送
    • 4.3 跟踪远程分支
    • 4.4 拉取
    • 4.5 删除远程分支
  • 五、变基(rebase)

名人榜上天下第一辩
众生芸芸难貌相,海水滔滔难斗量,平凡不是平凡客,世情百态掌握中。
网图,侵删!
天下第三人时期造型。

概述

分支是所有版本控制系统都支持的的功能。可以从主线分离开任务,以进行独立的开发而不形象主线。

一、Git分支简介

1.1 基本概念

Git的分支采用的是指针记录每个文件的快照以及相应的结构信息,而不是直接复制文件,这样的特性决定了Git的分支非常的轻量,几乎可以瞬间创建分支。

Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。

Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。

1.2 创建分支

git branch branchname		# 创建分支,但是不会切换到新的分支
git checkout -b <newbranchname>			# 创建分支,同时切换到新建的分支

(1) 先查看当前的版本信息
先查看下当前分支信息:

D:\Desktops\Test>git log --oneline --decorate		# 查看日志信息
917573c (HEAD -> master) 添加readme					# HEAD缓存指针指向master

(2)创建分支
创建的是分支的指针,不会自动切换到新的分支。
新建的分支会在当前对象的基础上创建一个新指针,并指向当前对象。
在这里插入图片描述

此时标识位置的指针HEAD依然指向当前版本,而不是新的分支上。
在这里插入图片描述

D:\Desktops\Test>git log --oneline --decorate
917573c (HEAD -> master, testbranch) 添加readme		# 有两个分支,HEAD依然指向master

1.3 分支切换

使用checkout可以切换当前分支,每次提交指挥提交到HEAD所在的分支,而不会分支之间是独立的。
通过间的的切换分支和提交动作,可以快速的在不同分支之间切换,然后时机成熟时将分支合并起来。

git checkout <branchname> 		# 切换分支

(1) 使用指令直接切换分支:
在这里插入图片描述

D:\Desktops\Test>git checkout testbranch
Switched to branch 'testbranch'
A       Test1.txt
A       Test2.txtD:\Desktops\Test>git log --oneline --decorate
917573c (HEAD -> testbranch, master) 添加readme

(2) 提交修改
提交只会提交到当前分支里,其他分支不会变化。
在这里插入图片描述

D:\Desktops\Test>git log --oneline --decorate		# 查看当前分支
917573c (HEAD -> testbranch, master) 添加readmeD:\Desktops\Test>git commit							# 提交资料
[testbranch f60127a] 添加新文件2 files changed, 1 insertion(+)create mode 100644 Test1.txtcreate mode 100644 Test2.txtD:\Desktops\Test>git log --oneline --decorate
f60127a (HEAD -> testbranch) 添加新文件		# 新提交分分支
917573c (master) 添加readme					# 旧的分支一人保持旧的快照版本

(3) 切换到master分支,重新提交
切换master分支,重新提交,将会在master当前分支快照的基础上,延伸出先得的一个版本。
在这里插入图片描述
在这里插入图片描述

D:\Desktops\Test>git checkout master					# 切换到master分支
Switched to branch 'master'D:\Desktops\Test>git log --oneline --decorate --all		# 查看所有分支
f60127a (testbranch) 添加新文件
917573c (HEAD -> master) 添加readmeD:\Desktops\Test>git add TestAdd.txt TestFile.txt		# 添加文件D:\Desktops\Test>git commit -a -m "另一个提交版本"		# 提交修改
[master ea99183] 另一个提交版本2 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 TestAdd.txtcreate mode 100644 TestFile.txtD:\Desktops\Test>git log --oneline --decorate --all		# 重新查看日志
ea99183 (HEAD -> master) 另一个提交版本					# 当前分支新版本
f60127a (testbranch) 添加新文件							# 另一个分支没有变化
917573c 添加readme											

1.4 删除分支

使用-d参数删除分支。

git branch -d <branchname>		# 删除分支

二、新建和合并分支

2.1 工作流程示意图

在这里插入图片描述

  1. 开发软件时有一个新需求1,那就在原来的基础上新建一个“新分支1”进行修改;
  2. 新需求1还没有改完的时候,来个个新需求2,要求先改新需求2;
  3. 这个时候就可以根据新需求2先新建一个分支“新分支2”进行修改,修改完之后合并到主分支上;
  4. 然后可以切换到新分支1上继续完成修改;
  5. 修改完成后再合并到主分支上;
  6. 这样就可以再各个分支上进行切换,而不会影响到各自的操作;

2.2 新建分支

使用-b参数可以新建分支的时候直接切换到新分支。

git checkout -b <branchname>  # 新建分支,同时切换到新的分支

2.3 合并分支

合并分支是以当前分支未主分支,然后把要合并的分支合并到当前分支中,也就是合并时将其他分支合并到HEAD执行的分支中。

$ git checkout master
$ git merge <branchname>

2.4 分支示例

2.4.1 当前除了主分支,再次创建了两个分支

D:\Desktops\Test>git log --oneline --decorate --all
7582919 (HEAD -> test1) add test1.txt
ea99183 (master) 另一个提交版本
f60127a (testbranch) 添加新文件
917573c 添加readme

在这里插入图片描述

  • 提交后再master的基础上,创建了2个分支test1和testbranch;
  • 然后2个分支各自有重新提交了一个版本;
  • 限制的HEAD执行test1分支;

2.4.2 先合并test1分支

这个分支是在master基础上修改的分支,操作就是快进(Fast-forward)master分支到最新版本。

注:

  • 被合并的分支来源于主分支时,会将主分支的指针往前移。
  • 没有创建新的快照版本。
D:\Desktops\Test>git checkout master		# 切换到主分支
Switched to branch 'master'D:\Desktops\Test>git merge test1			# 合并test1分支
Updating ea99183..7582919
Fast-forwardtest1.txt | 01 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 test1.txtD:\Desktops\Test>git log --oneline --decorate --all		# 查看分支
7582919 (HEAD -> master, test1) add test1.txt			# 合并了分支,两个分支都还存在
ea99183 另一个提交版本
f60127a (testbranch) 添加新文件
917573c 添加readme

在这里插入图片描述
删除被合并的分支。
注意,如果分支未合并将无法删除。

D:\Desktops\Test>git branch -d test1		# 删除被合并的分支
Deleted branch test1 (was 7582919).D:\Desktops\Test>git log --oneline --decorate --all
7582919 (HEAD -> master) add test1.txt
ea99183 另一个提交版本
f60127a (testbranch) 添加新文件
917573c 添加readme

在这里插入图片描述

2.4.3 合并testbranch分支

合并testbranch分支,由于两个分支不是延续的,所有会创建一个新的版本在主分支。
新的版本分支只在master分支上。

D:\Desktops\Test>git merge testbranch
Merge made by the 'ort' strategy.Test1.txt | 1 +Test2.txt | 02 files changed, 1 insertion(+)create mode 100644 Test1.txtcreate mode 100644 Test2.txtD:\Desktops\Test>git log --oneline --decorate --graph --all*   bc352f3 (HEAD -> master) Merge branch 'testbranch'
|\
| * f60127a (testbranch) 添加新文件* | 7582919 add test1.txt* | ea99183 另一个提交版本
|/* 917573c 添加readme

在这里插入图片描述

2.5 解决合并时的冲突

合并时有文件冲突是会停止合并,然后将文件标记为冲突。

  • 可以通过手动修改冲突文件,然后用add指令将文件修改为已解决冲突。
  • 也可以通过git mergetool指令调用默认的冲突解决工具修改差异解决冲突。

(1) test1分支修改test1.txt文件

D:\Desktops\Test>git branch test1		# 创建到test1分支D:\Desktops\Test>git checkout test1		# 切换到test1分支
Switched to branch 'test1'
M       test1.txtD:\Desktops\Test>git commit -a -m "修改test1文件"	# 修改test1文件,然后提交
[test1 01b290b] 修改test1文件1 file changed, 1 insertion(+)D:\Desktops\Test>git log --oneline --decorate --graph --all		# 查看分支
* 01b290b (HEAD -> test1) 修改test1文件
*   bc352f3 (master) Merge branch 'testbranch'
|\
| * f60127a (testbranch) 添加新文件
* | 7582919 add test1.txt
* | ea99183 另一个提交版本
|/
* 917573c 添加readme

(2) master分支修改test1.txt文件

D:\Desktops\Test>git checkout master
Switched to branch 'master'
M       Test1.txtD:\Desktops\Test>git commit -a -m "修改test1文件"
[master f2c82e1] 修改test1文件1 file changed, 1 insertion(+)D:\Desktops\Test>git log --oneline --decorate --graph --all
* f2c82e1 (HEAD -> master) 修改test1文件
| * 01b290b (test1) 修改test1文件
|/
*   bc352f3 Merge branch 'testbranch'
|\
| * f60127a (testbranch) 添加新文件
* | 7582919 add test1.txt
* | ea99183 另一个提交版本
|/
* 917573c 添加readme

(3) 合并有分歧的两个分支

D:\Desktops\Test>git merge test1
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Automatic merge failed; fix conflicts and then commit the result.

此时提示了合并冲突的文件名字。

(4) 使用“git mergetool”指令解决冲突

D:\Desktops\Test>git mergetool		# 使用默认工具解决冲突This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
tortoisemerge emerge vimdiff nvimdiff
Merging:
test1.txtNormal merge conflict for 'test1.txt':{local}: modified file{remote}: modified file
Hit return to start merge resolution tool (tortoisemerge): local # 选择解决方式

一下是弹出的对比工具的界面,下方是解决冲突后的文件内容。
在这里插入图片描述
保存退出后,重新提交(git commit)就可以完成合并了。

D:\Desktops\Test>git merge test1
fatal: You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you merge.D:\Desktops\Test>git commit
[master a71a2a7] Merge branch 'test1'D:\Desktops\Test>git merge test1		# 再次执行合并指令会提示已经全部更新。
Already up to date.D:\Desktops\Test>git log --oneline --decorate --graph --all		# 查看分支装填显示已合并。
*   a71a2a7 (HEAD -> master) Merge branch 'test1'	
|\
| * 01b290b (test1) 修改test1文件
* | f2c82e1 修改test1文件
|/
*   bc352f3 Merge branch 'testbranch'
|\
| * f60127a (testbranch) 添加新文件
* | 7582919 add test1.txt
* | ea99183 另一个提交版本
|/
* 917573c 添加readme

三、分支管理

注: 下文示例分支状态见2.5

3.1 查看所有分支列表

git branch	# 不添加任何参数表示查看说有分支列表

示例:

D:\Desktops\Test>git branch
* mastertest1testbranch

“*” 字符:它代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分支)

3.2 查看每一个分支的最后一次提交

git branch -v

示例:

D:\Desktops\Test>git branch -v
* master     a71a2a7 Merge branch 'test1'test1      01b290b 修改test1文件testbranch f60127a 添加新文件

3.3 查看已经合并或尚未合并到当前分支的分支

git branch --merged		# 已合并到当前分支的分支
git branch --no-merged	# 未合并到当前分支的分支

示例:

D:\Desktops\Test>git branch --merge
* mastertest1testbranchD:\Desktops\Test>git branch --no-mergeD:\Desktops\Test>

四、远程分支

远程引用是对远程仓库的引用(指针),包括分支、标签等等。

4.1 获取远程分支

git ls-remote <remote> 		# 显式地获得远程引用的完整列表
git remote show <remote> 	# 获得远程分支的更多信息
使用远程跟踪分支来看远程分支。

远程跟踪分支以<remote>/<branch> 的形式命名。

注: 所有的操作均在本地,只要不推送到远程分支或者拉取远程分支,那远程跟踪分支将不会更新。

4.2 推送

git push 									# 直接推动当前分支
git push <remote> <branch>					# 将本地分支推送到远程同名分支上
git push <remote> <branch>:<remotebranch>	# 将本地分支推送到远程指定分支上
D:\Desktops\TestClone\Clone2>git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 579 bytes | 579.00 KiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
To D:/Desktops/Test/.git/57a41ad..4ecf733  master -> master

4.3 跟踪远程分支

git checkout --track origin/branch		# 跟踪远程分支
git checkout <branchname>				# 当本地分支和远程分支有唯一一个匹配的分支时,会自动跟踪
git checkout -b <branch> <remote>/<branch>		# 指定本地分支和远程分支,两个分支名可以不一样
git branch -u <remote>/<branch>					# 设置本地分支跟踪刚刚拉取下来的远程分支
git branch -vv							# 查看所有的跟踪分支

4.4 拉取

git fetch		# 从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容
git pull		# 大多数情况下它的含义是一个 git fetch 紧接着一个 git merge 命令

注: git pull 的自动合并经常令人困惑,所以通常单独显式地使用 fetch 与 merge 命令会更好一些。

4.5 删除远程分支

使用–delete配合push可以删除远程分支(移除指针)。

git push <remote> --delete <branch>

五、变基(rebase)

用 rebase 命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。

git checkout <branch>					# 检出分支
git rebase <newbranch>				# 将当前分支变基到另一个分支上
git rebase --onto master server client		# 选中在 client 分支里但不在 server 分支里的修改(即 C8 和 C9),将它们在 master 分支上重放
git rebase <basebranch> <topicbranch> 		# 直接将topicbranch分支 变基到basebranch分支上。 这样做能省去你先切换到 server 分支,再对其执行变基命令的多个步骤。

合并和变基两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。

注:

  • 如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基;
  • 变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。

如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟。

相关文章:

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支&#xff0c;再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…...

分布式系统中最基础的 CAP 理论及其应用

对于开发或设计分布式系统的架构师、工程师来说&#xff0c;CAP 是必须要掌握的基础理论&#xff0c;CAP 理论可以帮助架构师对系统设计中目标进行取舍&#xff0c;合理地规划系统拆分的维度。下面我们先讲讲分布式系统的特点。 分布式系统的特点 随着移动互联网的快速发展&a…...

计算机视觉(OpenCV+TensorFlow)

计算机视觉&#xff08;OpenCVTensorFlow&#xff09; 文章目录 计算机视觉&#xff08;OpenCVTensorFlow&#xff09;前言3.图像金字塔3.1 高斯金字塔3.2 拉普拉斯金字塔 4.图像轮廓图像边缘和图像轮廓的区别检测图像绘制边缘 5.轮廓近似外接矩形外接圆 6. 模板匹配6.1 什么是…...

shell语法

概论 shell是我们通过命令行与操作系统沟通的语言 shell脚本可以直接在命令行中执行&#xff0c;也可以将一套逻辑组织成一个文件&#xff0c;方便复用。 DA Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。 1.脚本示例 新建一个test.sh文件&#xff0c;内容如…...

JAXB的XmlAttribute注解

JAXB的XmlAttribute注解&#xff0c;将一个JavaBean属性映射到一个XML属性。 例如&#xff0c;下面的Java代码&#xff0c;将属性currency映射到了XML的属性currency&#xff1a; package com.thb;import jakarta.xml.bind.annotation.XmlAttribute; import jakarta.xml.bind…...

【代码】基于改进差分进化算法的微电网调度研究matlab

程序名称&#xff1a;基于改进差分进化算法的微电网调度研究 实现平台&#xff1a;matlab 代码简介&#xff1a;了进一步提升差分进化算法的优化性能,结合粒子群(PSO)算法的进化机制,提出一种混合多重随机变异粒子差分进化算法(DE-PSO)。所提算法不仅使用粒子群差分变异策略和…...

计算机基础知识63

Django的条件查询&#xff1a;查询函数 exclude exclude&#xff1a;返回不满足条件的数据 res Author.objects.exclude(pk1) print(res) # <QuerySet [<Author: Author object (2)>, <Author: Author object (3)>]> order_by 1、按照 id 升序排序 res …...

springboot虚拟请求——测试

springboot虚拟请求 表现层测试 web环境模拟测试 虚拟请求状态匹配——执行状态的匹配 Testvoid testStatus(Autowired MockMvc mvc) throws Exception { // //http://localhost:8080/books// 创建一个虚拟请求&#xff0c;当前访问的是booksMockHttpServletRequestBui…...

计算机视觉各个方向概述

计算机视觉发展很长时间了&#xff0c;由传统的计算机视觉到现在如火如荼的计算机视觉多模态&#xff0c;有很多的方向&#xff0c;每一个方向都是一个研究门类&#xff0c;有些已经比较成熟&#xff0c;有些还处于一个开始的阶段&#xff0c;相对于文本语言的处理&#xff0c;…...

AIGC: 关于ChatGPT中API接口调用相关准备工作

ChatGPT之API接口相关 通过页面和GPT交流获取信息相比直接调用GPT的API而言是非常有限的 页面上的GPT是比较封闭的&#xff0c;而且只允许我们去输入文本的信息 我们需要借助GPT的API开发来激发AI工具的无限可能&#xff0c;实现更多个性化需求 1 &#xff09;使用API 使用A…...

【Java Web学习笔记】 1 - HTML入门

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/html 零、网页的组成 HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息&#xff0c;可以包含文字、图片视频等。 CSS样式是表现。就像网页的外衣。比如&#xff0c;标题字体、…...

基于windows系统使用Python对于pc当前的所有窗口的相关操作接口

对于windows系统的电脑使用Python可以对其当前的窗口进行宏观的查询等操作 派生博客1:python对pc的窗口进行操作(windows) 派生博客2python获取当前pc的分辨率(windows) 派生博客3使用uiautomation模块来对基于windows系统的pc中的前端界面进行自动化测试(查找控件&#xff…...

30秒搞定一个属于你的问答机器人,快速抓取网站内容

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 简介运行效果GitHub地址 简介 爬取一个网站的内容&#xff0c;然后让这个内容变成你自己的私有知识库&#xff0c;并且还可以搭建一个基于私有知识库的问…...

JPA数据源Oracle异常记录

代码执行异常 ObjectOptimisticLockingFailureException org.springframework.orm.ObjectOptimisticLockingFailureException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested exception is org.hibernate.StaleSta…...

抽奖送平板是骗局!!!

在街上被派传单&#xff0c;然后扫了码抽奖中了平板&#xff0c;被领到卖电器门店兑奖。他们给我在宜嘉商城上充值4980&#xff0c;我现场给他们付了4980元&#xff0c;签了他们的业务办理单&#xff0c;上面有违约者赔款30%违约金字样。我领走了荣耀畅玩40plus手机一台。第二天…...

json.decoder.JSONDecodeError: Extra data: line 1 column 332 (char 331)

项目场景&#xff1a; 提示&#xff1a;扩充数据集时&#xff0c;同步修改json标签中的"imagePath"字段的值&#xff0c;出现json文件读写不一致问题。 采用open函数读写模式修改json文件字段。open(jsonF.json, r)。 问题描述 运行修改json文件报错&#xff1a;j…...

rust持续学习 COW

COW我第一次看见还以为是奶牛 很奇怪是个啥 后来了解到是clone on write 缩写的&#xff0c;大乌龙啊 这个有两种enum,一种是borrow&#xff0c;一种是own rust中&#xff0c;数据读写经常涉及到所有权 这个borrow&#xff0c;很显然&#xff0c;就是不可变借用了 own就是可以写…...

【计算机网络】14、DHCP

文章目录 一、概述1.1 好处 二、概念2.1 分配 IP2.2 控制租赁时间2.3 DHCP 的其他网络功能2.4 IP地址范围和用户类别2.5 安全 三、DHCP 消息3.1 DHCP discover message3.2 DHCP offers a message 如果没有 DHCP&#xff0c;IT管理者必须手动选出可用的 ip&#xff0c;这太耗时了…...

【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)...

IDEA常用快捷键

快捷键功能tab接受选择–选择的名称将覆盖带插入符号右侧的其它名称–而如果按shift或者enter&#xff0c;光标右边的内容会保留Ctrlshift空格智能匹配–查找当前上下文的方法和变量Ctrld对比文件–选中需要对比的文件shift滚动水平滚动Ctrlaltl格式化Ctrlk提交Ctrlaltz回滚类C…...

【2024秋招】2023-10-17 金山云文档服务端二面

1 实习 1.1 讲解一下curd启动器 1.2 数据同步的过程是怎么实现的&#xff0c;同步过程中的数据一致性怎么保证的 答&#xff1a;同步过程中会记录断点&#xff0c;表示每一批同步成功时的位置&#xff0c;如果对端出现问题&#xff0c;则下一次同步会继续从这个断点后开始同…...

一种excel多线程并发写sheet的方案

一、背景 有一次项目的需求要求导出excel&#xff0c;并且将不同的数据分别写到不同的sheet中。 二、 方案概述 首先一开始使用easyexcel去导出excel&#xff0c;结果发现导出时间需要3秒左右。于是想着能不能缩短excel导出时间&#xff0c;于是第一次尝试使用异步线程去查询数…...

深入了解接口测试:揭秘网络分层和数据处理!

网络分层和数据 上一小节中介绍了接口测试中一些必要重要的定义&#xff0c;这一节我们来讨论一下在学习接口测试过程中我们要关注的最重要的东西&#xff1a;网络分层和数据。 首先&#xff0c;我们来尝试理解一下&#xff0c;为什么网络是要分层的呢&#xff1f; 我们可以…...

Java并发编程

进程和线程 进程即程序的一次执行过程&#xff0c;各个进程之间是独立的。线程是更小的单位&#xff0c;一次进程中&#xff0c;可能会有多个线程&#xff0c;可能会相互影响&#xff0c;各个线程有自己的程序计数器&#xff0c;虚拟机栈和本地方法栈&#xff0c;同时共同使用…...

vue+echarts实现依赖关系无向网络拓扑结图节点折叠展开策略

目录 引言 一、设计 1. 树状图&#xff08;不方便呈现节点之间的关系&#xff0c;次要考虑&#xff09; 2. 力引导依赖关系图 二、力引导关系图 三、如何实现节点的Open Or Fold 1. 设计逻辑 节点展开细节 节点收缩细节 代码实现 四、结果呈现 五、完整代码 引言 我…...

Unity3d 灯光阴影开启,法线贴图出现BUG

URP项目打开灯光的阴影后&#xff0c;法线贴图出现BUG 解决方案&#xff1a;按照下图所示调整材质的选项即可...

c语言:模拟实现atoi函数

atoi函数的功能和用法&#xff1a; 主要功能&#xff1a;将字符串转换为整数。例如&#xff0c;将字符类型的“123”转换为整数123. #include <stdio.h> #include <stdlib.h>int main() {char str[] "123";int num atoi(str);printf("Converted …...

Docker 使用心得

创建一个docker 镜像&#xff0c;相关运行代码&#xff0c;放在docker镜像文件同级&#xff0c; pm2 不能与 docker一起使用&#xff08;&#xff09; # node 服务docker FROM node:10.16.3LABEL author"sj"RUN mkdir -p /var/nodeCOPY ./node /var/nodeWORKDIR /va…...

Nacos 架构原理

基本架构及概念​ 服务 (Service)​ 服务是指一个或一组软件功能&#xff08;例如特定信息的检索或一组操作的执行&#xff09;&#xff0c;其目的是不同的客户端可以为不同的目的重用&#xff08;例如通过跨进程的网络调用&#xff09;。Nacos 支持主流的服务生态&#xff0c…...

尝试修改vim光标的思路

尝试修改vim光标&#xff0c;失败 想让vim的光标在不同模式下显示不同样式 尝试了很多方法&#xff0c;但是没有作用 " Set cursor shape and color if &term ~ "xterm"" INSERT modelet &t_SI "\<Esc>[6 q" . "\<Esc&…...