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

Git Flow 工作流学习要点

Git Flow 工作流学习要点

  • Git Flow — 流程图
  • Git Flow — 操作指令
    • 优点:
    • 缺点:
    • Git Flow 分支类型
    • Git Flow 工作流程简述
      • 关于 feature 分支
      • 关于 Release 分支
      • 关于 hotfix 分支
  • 总结

Git Flow — 流程图

在这里插入图片描述
图片来源:https://nvie.com/posts/a-successful-git-branching-model/

Git Flow — 操作指令

Git Flow 是一种流行的 Git 工作流模型,它通过定义严格的分支规则来帮助团队协作开发大型项目。以下是 Git Flow 的整体流程及一些基本的 Git 指令使用:

  1. 初始化 Git Flow:

    • 首先,你需要有一个 Git 仓库。如果你还没有初始化,可以使用以下命令:
      git init
      
  2. 创建主分支:

    • 主分支(master branch)是 Git Flow 的核心,用于存放所有发布版本的代码。
    • 通常,当你初始化一个新仓库时,Git 会自动创建一个主分支。
  3. 创建开发分支:

    • 开发分支(develop branch)用于日常的开发工作,所有的新功能和修复都应该在这个分支上进行。
    • 创建开发分支的命令:
      git checkout -b develop
      
  4. 创建功能分支:

    • 功能分支(feature branches)用于开发新功能。每个功能都应该有自己的分支。
    • 创建功能分支的命令:
      git checkout -b feature/feature-name
      
  5. 开发和提交:

    • 在功能分支上进行开发,使用 git add 添加更改到暂存区,然后使用 git commit 提交更改:
      git add .
      git commit -m "Commit message"
      
  6. 合并功能分支到开发分支:

    • 当一个功能开发完成并通过测试后,应该将其合并回开发分支。
    • 合并的命令:
      git checkout develop
      git merge --no-ff feature/feature-name
      
  7. 发布准备分支:

    • 当开发分支上的代码准备发布时,可以创建一个发布准备分支(release branch)。
    • 创建发布准备分支的命令:
      git checkout -b release/release-name
      
  8. 完成发布:

    • 在发布准备分支上,进行最后的测试和修改,然后合并回主分支和开发分支。
    • 合并到主分支的命令:
      git checkout master
      git merge --no-ff release/release-name
      
    • 合并回开发分支的命令:
      git checkout develop
      git merge --no-ff release/release-name
      
  9. 创建标签:

    • 在主分支上,为发布的版本创建一个标签(tag)。
    • 创建标签的命令:
      git tag -a v1.0.0 -m "Release version 1.0.0"
      
  10. 删除分支:

    • 发布完成后,可以删除不再需要的分支。
    • 删除分支的命令:
      git branch -d release/release-name
      
  11. 修复错误:

    • 如果在主分支上发现错误,可以创建一个修复分支(hotfix branch)。
    • 创建修复分支的命令:
      git checkout -b hotfix/hotfix-name
      
    • 修复完成后,合并回主分支和开发分支,然后删除修复分支。

Git Flow 是一种流行的 Git 工作流程,它为团队协作提供了一个结构化的模型。下面是 Git Flow 的一些主要优点和缺点:

优点:

  1. 清晰的分支结构:Git Flow 通过定义不同的分支角色,如 masterdevelopfeaturereleasehotfix,使得项目的版本控制更加清晰和有序。

  2. 功能隔离:开发人员可以在 feature 分支上独立工作,这有助于隔离开发中的功能,避免干扰主分支。

  3. 易于维护:通过将代码库的不同部分分开管理,Git Flow 使得代码维护变得更加容易。

  4. 支持复杂的开发流程:对于需要多个阶段和多个环境的复杂项目,Git Flow 提供了一种有效的解决方案。

  5. 促进代码审查:在合并到 developrelease 分支之前,通常需要进行代码审查,这有助于提高代码质量。

  6. 支持持续集成:Git Flow 可以很好地与持续集成(CI)工具配合使用,自动化测试和构建流程。

  7. 版本发布控制:通过 release 分支,可以控制发布过程,确保发布的版本是经过测试和审查的。

缺点:

  1. 学习曲线:对于新手来说,Git Flow 的复杂性可能需要一些时间来学习和适应。

  2. 分支管理复杂性:随着项目的增长,分支数量可能会变得难以管理,特别是如果团队成员不严格遵守流程。

  3. 合并冲突:频繁的分支合并可能导致合并冲突,需要额外的时间来解决。

  4. 分支生命周期管理:需要跟踪每个分支的生命周期,包括创建、合并和删除,这可能会增加管理负担。

  5. 自动化难度:虽然 Git Flow 可以与 CI 工具配合使用,但是自动化 Git Flow 的某些方面可能需要额外的工具或脚本。

  6. 不适合小型项目:对于小型或快速迭代的项目,Git Flow 可能过于复杂,不如更简单的工作流程如 GitHub Flow 或 GitLab Flow 那样高效。

  7. 可能导致瓶颈:如果团队成员必须等待特定分支的合并,可能会造成工作流程的瓶颈。

  8. 文档和沟通要求:为了有效使用 Git Flow,团队成员需要有良好的文档和沟通,以确保每个人都理解流程和当前的状态。

总的来说,Git Flow 是一种强大的工作流程,适用于需要严格版本控制和多阶段开发的项目。然而,它可能不适合所有团队或项目,特别是那些更倾向于快速迭代和简单流程的团队。选择哪种工作流程应根据团队的具体需求和项目特性来决定。

Git Flow 是一种流行的 Git 工作流模式,由 Vincent Driessen 提出,旨在为大型项目提供一种健壮的分支管理框架。它特别适合那些有预定发布周期的项目。以下是 Git Flow 的详细内容解析和指令详解:

Git Flow 分支类型

  1. 主分支(Master):存储生产就绪的代码,通常是最新的稳定版本。
  2. 开发分支(Develop):包含最新的开发成果,是所有新功能的集成点。
  3. 特性分支(Feature Branch):基于 Develop 分支创建,用于开发新功能或修复。
  4. 发布分支(Release Branch):从 Develop 分支创建,用于准备新版本的发布。
  5. 修复分支(Hotfix Branch):从 Master 分支创建,用于紧急修复生产环境中的问题。

Git Flow 工作流程简述

  • 开发新功能时,从 Develop 分支创建 Feature 分支。
  • 完成功能开发后,将 Feature 分支合并回 Develop 分支,并删除 Feature 分支。
  • 当准备发布新版本时,从 Develop 分支创建 Release 分支。
  • 在 Release 分支上进行最后的测试和调整,完成后合并回 Master 和 Develop 分支,并打上版本标签。
  • 如果在 Master 分支上发现紧急问题,从 Master 分支创建 Hotfix 分支进行修复,修复完成后合并回 Master 和 Develop 分支,并打上修复标签。

关于 feature 分支

功能分支(Feature Branches)

  • 从 Develop 分支拉出。
  • 用于开发新功能或修复缺陷。
  • 完成后,通过 Pull Request 或者 Merge Request 合并回 Develop 分支。
    Feature
    随项目越来越大,就会有越来越多的功能在同步开发,这时候怎么办?
    上图这样同时有几个feature同时在开发的场景多了去了。但是 Git Flow 告诉我们不用操心,尽管开发自己的功能便是,但是你一定要注意一点,开发测试完自己的功能就一定要赶快合并回主线,并删除这个分支。

无论何时,都要让未合并的feature分支越少越好,分支生命周期越短越好。这件事情对帮助 develop 的稳定性有莫大的好处。

注意:
feature 分支的生命周期不应过长。如果这个功能分支涵盖的业务太多太复杂导致生命周期太长。也应尽力细化,区分成更多更小的单元。试着再多拆分成几个独立的小 feature

功能分支在 Git Flow 工作流中扮演着关键角色,它们为开发者提供了一个独立的环境来开发新功能或修复缺陷。功能分支的生命周期通常从 Develop 分支开始,开发者会基于当前的开发进度创建一个新的分支,命名通常遵循 feature-<feature-name> 的格式。在这个分支上,开发者可以自由地进行编码、提交更改,并编写必要的测试来确保功能的正确性。

开发过程中,功能分支保持与远程仓库的同步,以避免将来合并时出现冲突。当功能开发完成并通过本地测试后,开发者会发起一个 Pull Request 或 Merge Request,请求其他团队成员进行代码审查。代码审查是一个重要的环节,它有助于提高代码质量,确保新功能符合项目标准。

一旦代码审查通过,并且解决了可能出现的任何合并冲突,功能分支就可以被合并回 Develop 分支,完成功能集成。这个过程有助于将新开发的功能逐步集成到主开发线中,同时保持代码库的稳定性。合并完成后,功能分支将不再需要,可以被删除,以保持仓库的整洁。

功能分支的使用场景非常广泛,包括但不限于新功能的添加、缺陷的修复、实验性代码的尝试,以及多人协作项目中的并行开发。它们为开发者提供了灵活性,允许他们专注于特定任务,同时减少了对主开发线的干扰。然而,合理地管理功能分支的生命周期对于维护项目的健康和效率至关重要。

关于 Release 分支

Release

黄色为 develop 分支,蓝色为 master 分支

图中绿色的点代表了release分支短暂的一生。一旦开启release分支,就进入了发布前的最终测试阶段。

也有人将release分支仅视为进入master之前的缓冲区,所有的最终测试都是针对master进行的,一旦发现问题就新开分支修复。

但有一条必须严格遵守 非常重要

release 分支只能修 bug,不能添加新功能。

一旦开了release分支,就只能修复 bug,不能再加新功能。实践中,总有人喜欢在 bug 修复中夹带新功能,但要知道,此时往往缺乏全面回归测试的支持。这相当于在即将发布的版本中,悄悄植入未经充分验证的新功能,等同于埋下了随时可能爆炸的炸弹。

发布分支的生命周期开始于 Develop 分支,当开发团队认为代码库中的代码已经足够稳定,准备发布时,会从 Develop 分支创建一个新的发布分支。这个分支通常命名为 release-<version>,例如 release-1.2.0

在发布分支的开发流程中,主要包含以下几个步骤:

  1. 准备发布:从 Develop 分支创建发布分支后,团队会开始准备发布所需的工作,这可能包括更新文档、调整配置文件、修改版本号等。

  2. 修复小问题:在准备发布的过程中,可能会发现一些小问题或需要进行的小调整。这些问题通常不会引入新功能,而是确保当前功能在生产环境中的稳定性。

  3. 测试:发布分支需要经过严格的测试,以确保所有功能按预期工作,没有引入新的问题。

  4. 合并请求:在测试通过后,团队会发起一个合并请求,将发布分支的更改合并回 Develop 分支,以确保 Develop 分支包含最新的发布内容。

  5. 发布:一旦合并请求完成,团队会将发布分支的代码合并到 Master 分支,并在 Master 分支上打上标签,标记具体的版本号。

  6. 更新 Develop 分支:发布完成后,通常还需要将 Master 分支上的更改反向合并回 Develop 分支,以确保 Develop 分支的代码是最新的。

  7. 删除发布分支:发布流程结束后,发布分支的使命完成,可以被删除。

使用场景包括:

  • 版本发布:当项目需要发布新版本时,发布分支用于准备和测试即将发布的版本。
  • 紧急修复:如果发布分支中发现了紧急问题,可以在发布分支上快速修复并重新发布。
  • 稳定性保证:发布分支提供了一个稳定的环境,用于在最终发布前确保所有更改的稳定性。
  • 并行开发:在准备发布的同时,其他开发者可以在 Develop 分支上继续开发新功能,不会影响发布流程。

发布分支的使用确保了软件发布的流程化和标准化,有助于减少发布过程中的风险,同时允许团队在准备发布的同时继续开发新功能。

关于 hotfix 分支

在正式环境中发现问题需要修复,这时就需要使用 hotfix 分支了。

Hotfix 分支在 Git Flow 工作流中用于快速修复生产环境中的紧急问题。

生命周期

Hotfix 分支的生命周期通常较短,并且非常目标导向:

  1. 创建 Hotfix 分支:从 Master 分支创建 Hotfix 分支,通常命名为 hotfix-<issue>hotfix-<version>-<issue>

  2. 快速修复:在 Hotfix 分支上迅速定位并修复问题。

  3. 测试:对修复进行测试,确保问题得到解决且没有引入新的问题。

  4. 合并更改:将 Hotfix 分支的更改合并回 Master 分支,并在 Master 分支上打上新的标签,表示修复后的版本。

  5. 同步 Develop 分支:将 Master 分支上的更改反向合并回 Develop 分支,确保 Develop 分支的代码包含最新的修复。

  6. 部署:将修复后的代码部署到生产环境。

  7. 删除 Hotfix 分支:一旦修复被合并并部署,删除 Hotfix 分支。

开发流程

  1. 问题识别:在生产环境中发现紧急问题需要立即解决。

  2. 创建 Hotfix 分支:基于当前 Master 分支的代码创建 Hotfix 分支。

  3. 开发修复:在 Hotfix 分支上开发修复代码。

  4. 编写测试:编写必要的测试来验证修复是否有效。

  5. 代码审查:进行代码审查,确保修复的质量。

  6. 合并和打标签:将 Hotfix 分支合并回 Master 分支,并打上相应的标签。

  7. 更新 Develop 分支:将 Master 分支的更改合并回 Develop 分支。

  8. 部署修复:将修复后的代码部署到生产环境。

  9. 删除 Hotfix 分支:修复部署后,删除 Hotfix 分支。

使用场景

  1. 生产环境问题:当生产环境中出现紧急问题,需要立即修复以避免影响用户。

  2. 安全漏洞:发现安全漏洞时,需要快速开发并部署修复。

  3. 关键缺陷:关键功能出现缺陷,影响业务运行,需要快速修复。

  4. 合规性问题:需要快速解决合规性问题以遵守法律法规。

  5. 性能问题:生产环境中出现的性能问题,需要紧急优化。

Hotfix 分支的设计目的是为了快速响应生产环境中的问题,它们允许开发团队迅速隔离问题并提供解决方案,同时保持开发流程的连续性和稳定性。通过将修复同步回 Master 和 Develop 分支,Hotfix 分支确保了所有分支的代码都是最新的,减少了代码的碎片化。

hotfix

黄色为 develop 分支,蓝色为 master 分支

图中的红色圆圈就是hotfix,它从master分支切出,结束时同样要合并到master,并顺便同步到develop,流程和release分支类似。

实际上,我们在处理hotfix时,也要像对待release一样: 开分支的同时就要确定版本号,只能修复 bug,不能夹带新功能。 理由很简单,hotfixrelease跟正式环境运行的代码版本基本是一样的,因此对它们的谨慎程度也应该相同。而且由于hotfix通常紧急,更难以进行全面的回归测试(即使有回归测试,也不能完全保证无误)。因此,为了避免更大的损失,一定要慎之又慎

测试完毕,hotfix,重新上线,同时修复了develop,世界又回到了最初简单的状态,只剩下developmaster两个分支。

总结

1.feature 分支的生命周期不宜过长,最多最多不要超过一个迭代周期。
如果一个feature 分支包含的功能太多太复杂,开发周期太长,应该拆成几个小的feature
2.发版前必须切出release分支,预上线的测试版本一定要和实际上线的版本一致,release分支上只能做 bug 修复。
3.hotfixrelease分支开启时即要决定版本号,且同样只准修复 bug,不可加入新功能。
4.经常存在的分支只有两个:developmaster

Git Flow 是一种流行的分支管理策略,它为软件开发提供了一种结构化的方法来组织代码库。这种工作流通过定义不同的分支角色和生命周期,帮助团队更高效地协作和管理项目。以下是 Git Flow 分支管理的总结以及其使用场景:

分支管理

  1. Master 分支:代表生产就绪的代码,始终保持可部署状态。
  2. Develop 分支:日常开发的基础,从 Master 分支拉出,用于集成新功能。
  3. Feature 分支:从 Develop 分支拉出,用于开发新功能或修复缺陷。
  4. Release 分支:从 Develop 分支拉出,用于准备新版本的发布,包括修复小问题和更新文档。
  5. Hotfix 分支:从 Master 分支拉出,用于紧急修复生产环境中的问题。

使用场景

  1. 新功能开发:使用 Feature 分支来开发新功能,避免影响主开发线。
  2. 缺陷修复:在 Feature 分支上修复缺陷,经过测试后合并回 Develop 分支。
  3. 版本发布:通过 Release 分支准备新版本的发布,包括更新版本号和文档,测试通过后合并回 Master 和 Develop 分支。
  4. 紧急修复:当生产环境出现紧急问题时,使用 Hotfix 分支快速修复并部署到生产环境,然后同步回 Master 和 Develop 分支。
  5. 并行开发:多个开发者可以在不同的 Feature 分支上并行工作,提高开发效率。
  6. 代码审查:Pull Request 或 Merge Request 机制允许团队成员对 Feature 或 Release 分支的代码进行审查。

开发流程

  1. 从 Develop 分支创建 Feature 分支进行功能开发。
  2. 功能开发完成后,发起合并请求,合并回 Develop 分支。
  3. 当准备发布新版本时,从 Develop 分支创建 Release 分支,进行最后的测试和文档更新。
  4. 发布完成后,将 Release 分支合并回 Master 和 Develop 分支,并在 Master 分支上打标签。
  5. 如果生产环境需要紧急修复,从 Master 分支创建 Hotfix 分支,修复后合并回 Master 和 Develop 分支,并部署到生产环境。

Git Flow 的优势在于它提供了清晰的分支管理规则和流程,有助于团队成员理解各自的角色和责任。然而,这种工作流也可能带来一定的复杂性,特别是对于小型项目或团队,可能需要根据具体情况进行调整。总的来说,Git Flow 是一种灵活且强大的分支管理策略,适用于需要严格版本控制和频繁发布更新的软件开发项目。

devops

相关文章:

Git Flow 工作流学习要点

Git Flow 工作流学习要点 Git Flow — 流程图Git Flow — 操作指令优点&#xff1a;缺点&#xff1a;Git Flow 分支类型Git Flow 工作流程简述关于 feature 分支关于 Release 分支关于 hotfix 分支 总结 Git Flow — 流程图 图片来源&#xff1a;https://nvie.com/posts/a-succ…...

blender 快捷键 常见问题

一、快捷键 平移视图&#xff1a;Shift 鼠标中键旋转视图&#xff1a;鼠标中键缩放视图&#xff1a;鼠标滚动框选放大模型&#xff1a;Shift B线框预览和材质预览切换&#xff1a;Shift Z 二、常见问题 问题&#xff1a;导入模型成功&#xff0c;但是场景中看不到。 解…...

HTTP详解:TCP三次握手和四次挥手

一、TCP协议概述 TCP协议是互联网协议栈中传输层的核心协议之一&#xff0c;它提供了一种可靠的数据传输方式&#xff0c;确保数据包按顺序到达&#xff0c;并且没有丢失或重复。TCP的主要特点包括&#xff1a; 面向连接&#xff1a;TCP在传输数据之前需要建立连接。可靠传输&…...

详解HTTP:有了HTTP,为何需要WebSocket?

在日常生活中&#xff0c;HTTP 常用于请求数据。例如&#xff0c;当你打开一个天气预报网站时&#xff0c;浏览器会发送一个 HTTP 请求到服务器&#xff0c;请求当前的天气数据&#xff0c;服务器返回响应&#xff0c;浏览器解析并显示这些数据。 但是&#xff0c;当涉及到需要…...

Spring Boot 启动流程是怎么样的

引言 SpringBoot是一个广泛使用的Java框架&#xff0c;旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中&#xff0c;我们将深入探讨SpringBoot应用程序的启动流程&#xff0c;了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…...

【学习笔记】数据结构(三)

栈和队列 文章目录 栈和队列3.1 栈 - Stack3.1.1 抽象数据类型栈的定义3.1.2 栈的表示和实现 3.2 栈的应用举例3.2.1 数制转换3.2.2 括号匹配的检验3.2.3 迷宫求解3.2.4 表达式求值 - 波兰、逆波兰3.2.5 反转一个字符串或者反转一个链表 3.3 栈与递归的实现3.4 队列 - Queue3.4…...

学习python笔记:10,requests,enumerate,numpy.array

requests库&#xff0c;用于发送 HTTP 请求的 Python 库。 requests 是一个用于发送 HTTP 请求的 Python 库。它使得发送 HTTP 请求变得简单且人性化。以下是一些基本的 requests 函数及其用途&#xff1a; requests.get(url, **kwargs) 发送一个 GET 请求到指定的 URL。 i…...

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月&#xff0c;ChatGPT 成功面世&#xff0c;成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同&#xff0c;OpenAI 从初代模型 GPT-1 开始&#xff0c;始终贯彻只有解码器&#xff0…...

MySQL库与表的操作

目录 一、登录并进入数据库 1、登录 2、USE 命令 检查当前数据库 二、库的操作 1、创建数据库语法 2、举例演示 3、退出 三、字符集和校对规则 1、字符集&#xff08;Character Set&#xff09; 2、校对集&#xff08;Collation&#xff09; 总结 3、操作命令 …...

TTS 语音合成技术学习

TTS 语音合成技术 TTS&#xff08;Text-to-Speech&#xff0c;文字转语音&#xff09;技术是一种能够将文字内容转换为自然语音的技术。通过 TTS&#xff0c;机器可以“说话”&#xff0c;这大大增强了人与机器之间的互动能力。无论是在语音助手、导航系统还是电子书朗读器中&…...

小公司做自动化的困境

1. 人员数量不够 非常常见的场景, 开发没几个, 凭什么测试要那么多, 假设这里面有3个测试, 是不是得有1个人会搞框架? 是不是得有2人搞功能测试, 一个人又搞框架, 有些脚本, 真来得及吗? 2. 人员基础不够 现在有的大公司, 是这样子协作的, 也就是某模块需求谁谁测试的, 那么…...

基于pytorch框架的手写数字识别(保姆级教学)

1、前言 本文基于PyTorch框架,采用CNN卷积神经网络实现MNIST手写数字识别,不仅可以在GPU上,同时也可以在CPU上运行。方便即使只有CPU的小伙伴也可以运行该模型。本博客手把手教学,如何手写网络层(3层),以及模型训练,详细介绍各参数含义与用途。 2、模型源码解读 该模型…...

注意力机制在大语言模型中的应用

在大语言模型中&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;用于捕获输入序列中不同标记&#xff08;token&#xff09;之间的关系和依赖性。这种机制可以动态地调整每个标记对当前处理任务的重要性&#xff0c;从而提高模型的性能。具体来说&#xff0…...

qt 实现对字体高亮处理原理

在Qt中实现对文本的字体高亮处理&#xff0c;通常涉及到使用QTextDocument、QTextCharFormat和QSyntaxHighlighter。下面是一个简单的例子&#xff0c;演示如何为一个文本编辑器&#xff08;假设是QTextEdit&#xff09;添加简单的关键词高亮功能&#xff1a; 步骤 1: 定义关键…...

SAP中通过财务科目确定分析功能来定位解决BILLING问题实例

接用户反馈&#xff0c;一笔销售订单做发货后做销售发票时&#xff0c;没有成功过账到财务&#xff0c;提示财户确定错误。 这个之前可以通过VF02中点击小绿旗来重新执行过财动作&#xff0c;看看有没有相应日志来定位问题。本次尝试用此方法&#xff0c;也没有找到相关线索。 …...

充电站,正在杀死加油站

最近&#xff0c;深圳公布了一组数据&#xff0c;深圳的超级充电站数量已超过传统加油站数量&#xff0c;充电枪数量也已超过加油枪数量。 从全国范围看&#xff0c;加油站关停的速度在加快。 充电站正在杀死加油站。 加油站&#xff0c;未来何去何从&#xff1f; 01. 减少 我…...

哪个牌子的超声波清洗机好?四样超卓超声波清洗机独具特色!

眼镜是许多人日常生活中必不可少的工具&#xff0c;然而&#xff0c;相信很多人都有过清洗眼镜的烦恼。传统的清洗眼镜的方法往往不够彻底&#xff0c;容易留下污渍或者划伤镜片。因此&#xff0c;超声波洗眼镜机成为了现代人清洗眼镜的新选择。超声波洗眼镜机通过利用超声波震…...

vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则

比如以下内容&#xff1a; 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…...

Docker-Compose一键部署项目

Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…...

【C++】相机标定源码笔记-线激光点云处理工具类

一个线激光点云处理工具类&#xff0c;它包含了一系列的方法用于处理和分析线激光扫描得到的点云数据。提供的功能包括&#xff1a; 通过文件或直接数据设置点云。计算线激光在机器人坐标系下的精度&#xff0c;输出内点的平均距离、最大距离、最小距离、总点数和内点数。提供了…...

解决Transformer根本缺陷,所有大模型都能获得巨大改进

即使最强大的 LLM 也难以通过 token 索引来关注句子等概念&#xff0c;现在有办法了。 最近两天&#xff0c;马斯克和 LeCun 的口水战妥妥成为大家的看点。这两位 AI 圈的名人你来我往&#xff0c;在推特&#xff08;现为 X&#xff09;上相互拆对方台。 LeCun 在宣传自家最新论…...

如何排查Java应用的死锁

排查Java应用中的死锁问题是一个复杂但重要的任务&#xff0c;因为死锁会导致应用程序停止响应&#xff0c;影响用户体验和系统稳定性。以下是一些方法和步骤&#xff0c;帮助你排查Java应用中的死锁。 1. 理解死锁的概念 在计算机科学中&#xff0c;死锁是指两个或多个线程相…...

JS面试题1

1. 延迟加载JS有哪些方式&#xff1f; defer: 等html全部解析完成&#xff0c;才会执行js代码&#xff0c;顺次执行js脚本 async&#xff1a;是和html解析同步的&#xff0c;不是顺次执行js脚本&#xff08;当有很多个js时&#xff09;&#xff0c;是谁先加载完谁先执行。 <…...

Linux网络 - 再谈、详谈UDP和TCP协议

文章目录 前言预备netstatpidofcat /etc/services 一、UDP协议UDP协议端格式UDP的缓冲区基于UDP的应用层协议 二、TCP协议1.TCP协议段格式确认应答(ACK)机制三次握手疑问1 最后一次客户端发给服务端的ACK请求怎么保证服务端能够收到&#xff1f; 四次挥手疑问2 为什么挥手是四次…...

el-form重置后input无法输入问题

新增用户遇到的问题&#xff1a; 如果你没有为 formData 设置默认值&#xff0c;而只是将其初始化为空对象 {}&#xff0c;则在打开dialog时&#xff0c;正常输入&#xff0c; formdata会变成如下 但是&#xff0c;打开后&#xff0c;直接使用 resetFields 或直接清空表单&…...

Java网络编程(JavaWeb的基础)

Java网络编程&#xff08;JavaWeb的基础&#xff09; 文章目录 Java网络编程&#xff08;JavaWeb的基础&#xff09;前言一、网络编程概述1.1 软件架构&网络基础1.2 网络通信要素:IP/端口/通信协议1.3 传输层协议:tcp/udp 二、网络编程API2.1 InetAddress类2.2 Socket类&am…...

鸿蒙Harmony开发实战案例:使用OpenGL绘制3D图形

XComponent控件常用于相机预览流的显示和游戏画面的绘制,在OpenHarmony上&#xff0c;可以配合Native Window创建OpenGL开发环境&#xff0c;并最终将OpenGL绘制的图形显示到XComponent控件。本文将采用"Native C"模板&#xff0c;调用OpenGL ES图形库绘制3D图形&…...

DM达梦数据库存储过程

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…...

【python】OpenCV—Color Correction

文章目录 cv2.aruco 介绍imutils.perspective.four_point_transform 介绍skimage.exposure.match_histograms 介绍牛刀小试遇到的问题 参考学习来自 OpenCV基础&#xff08;18&#xff09;使用 OpenCV 和 Python 进行自动色彩校正 cv2.aruco 介绍 一、cv2.aruco模块概述 cv2.…...

Java基础知识整理笔记

目录 1.关于Java概念 1.1 谈谈对Java的理解&#xff1f; 1.2 Java的基础数据类型&#xff1f; 1.3 关于面向对象的设计理解 1.3.1 面向对象的特性有哪些&#xff1f; 1.3.2 重写和重载的区别&#xff1f; 1.3.3 面向对象的设计原则是什么&#xff1f; 1.4 关于变量与方…...

知识图谱——Neo4j数据库实战

数据与代码链接见文末 1.Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量...

第十一次Javaweb作业

4.登录校验 4.1会话 --用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求和响应。 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求…...

人工智能AI风口已开:如何赋予UI设计与视频剪辑新生命

随着科技的浪潮不断向前推进&#xff0c;人工智能&#xff08;AI&#xff09;正以惊人的速度重塑着我们的世界&#xff0c;特别是在创意产业的核心领域——UI设计与视频剪辑中&#xff0c;AI正逐步成为驱动行业创新与变革的关键力量。在这个AI技术全面开花的新时代&#xff0c;…...

计算机专业课面试常见问题-编程语言篇

目录 1. 程序的编译执行流程&#xff1f; 2. C浅拷贝和深拷贝的区别&#xff1f; 3. C虚函数&#xff1f; …...

CSS|05 继承性与优先级

继承性 一、继承性的特点&#xff1a; 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时&#xff0c;外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承&#xff1f; 答&#xff1a;并不是所有样式能被继承…...

KVM性能优化之内存优化(宿主机)

linux系统自带了一技术叫透明巨型页&#xff08;transparent huge page&#xff09;&#xff0c;它允许所有的空余内存被用作缓存以提高性能&#xff0c;而且这个设置是默认开启的&#xff0c;我们不需要手动去操作。 Centos下&#xff0c;我们用cat /sys/kernel/mm/transpare…...

【Linux杂货铺】Linux学习之路:期末总结篇1

第一章 什么是Linux? Linux 是 UNIX 操作系统的一个克隆&#xff1b;它由林纳斯 本纳第克特 托瓦兹从零开始编写&#xff0c;并在网络上众多松散的黑客团队的帮助下得以发展和完善&#xff1b;它遵从可移植操作系统接口&#xff08;POSIX&#xff09;标准和单一 UNIX 规范…...

GPT-5的到来:智能飞跃与未来畅想

IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂确认了GPT-5的发布计划&#xff0c;预计将在一年半后推出。穆拉蒂形象地将GPT-4到GPT-5的飞跃比作高中生到博士生的成长。这一飞跃将给我们带来哪些变化&#xff1f;GPT-5的…...

gin中间件

在web应用服务中&#xff0c;完整的业务处理在技术上包含客户端操作&#xff0c;服务端处理&#xff0c;返回处理结果给客户端三个步骤。但是在在更负责的业务和需求场景。一个完整的系统可能要包含鉴权认证&#xff0c;权限管理&#xff0c;安全检查&#xff0c;日志记录等多维…...

swagger常用注解

最近查看接口文档的时候发现&#xff0c;POST方法中的query没法在swagger中显示&#xff0c;查了才发现这是因为Swagger或OpenAPI规范默认将HTTP POST请求的参数识别为请求体&#xff08;body&#xff09;参数&#xff0c;而不是查询字符串&#xff08;query&#xff09;参数。…...

【Flink metric(1)】Flink指标系统的系统性知识:获取metric以及注册自己的metric

文章目录 一. Registering metrics&#xff1a;向flink注册新自己的metrics1. 注册metrics2. Metric types:指标类型2.1. Counter2.2. Gauge2.3. Histogram(ing)2.4. Meter 二. Scope:指标作用域1. User Scope2. System Scope ing3. User Variables 三. Reporter ing四. System…...

命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 定义 命令模式是对命令的封装&#xff0c;每一个命令都是一个操作&#xff1a;请求的一方发出请求要求执行一个操作&#xff1b;接收的一方收到请求&#xff0c;并执行操作。 命令模式解耦了请求方和接收方&#xff0c;请求…...

掌握Symfony的模板继承:构建强大且灵活的Web界面

掌握Symfony的模板继承&#xff1a;构建强大且灵活的Web界面 在Symfony框架中&#xff0c;模板继承是一个强大的功能&#xff0c;它允许开发者创建可重用的布局模板&#xff0c;并通过扩展这些模板来构建具体的页面。这种机制不仅提高了代码的可维护性&#xff0c;还使得页面结…...

uboot基本使用网络命令和从服务器端下载linux内核启动

网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…...

解决ArcGIS导出的svg格式的图片插入Word后的字体问题

背景 在ArcGIS中设置字体为Times New Roman&#xff0c;但导入Word后字体转为等线。 ArcGIS中的Layout 导入Word​​​​​​ 原因分析 Word无法识别嵌入进SVG格式文件中的字体。 解决方案 在Export Layer窗口中&#xff0c;将Embed fonts取消勾选&#xff0c;Convert cha…...

如何确保 Puppet 配置在复杂网络环境中的可靠分发和同步?

在复杂网络环境中确保 Puppet 配置的可靠分发和同步可以采取以下措施&#xff1a; 网络拓扑规划&#xff1a;在复杂网络环境中&#xff0c;首先需要进行网络拓扑规划&#xff0c;确保网络结构合理&#xff0c;并能够支持可靠的分发和同步机制。 Puppet Master 多节点部署&…...

2024最新!将mysql的数据导入到Solr

Solr导入mysql的数据 如何安装导入数据前准备配置Solr的Jar包以及Mysql驱动包1.1、将solr-8.11.3\dist下的两个包进行移动1.2、将mysql-connect包也移动到该位置1.3、重启Solr项目 配置xml2.1、第一步我们需要创建核心2.2、第二步修改xml(这里是结合19年的教程)2.3、 创建data-…...

Python数据分析第二课:conda的基础命令

Python数据分析第二课&#xff1a;conda的基础命令 1.conda是什么? conda是一个开源的包管理系统&#xff0c;可以帮助我们进行管理多个不同版本的软件包&#xff0c;还可以帮助我们建立虚拟环境&#xff0c;以便对不同的项目进行隔离。 简单来说&#xff0c;conda是一个软…...

LayoutInflater加载流程

简介 LayoutInflater在日常的Android开发中是经常使用的类&#xff0c;常常用于XML中View的加载相关流程。本文主要总结一些其常见api的源码流程。 获取LayoutInflater 我们一般会在Activity的onCreate方法中会通过setContentView方法设置自己的布局layoutId&#xff0c;Act…...

PLC数据采集案例

--------天津三石峰科技案例分享 项目介绍 项目背景 本项目为天津某钢铁集团下数字化改造项目&#xff0c;主要解决天津大型钢厂加氢站数字化改造过程中遇到的数据采集需求。项目难点PLC已经在运行了&#xff0c;需要采集里面数据&#xff0c;不修改程序&#xff0c;不影响P…...