基于git的开发规范总结

news2024/9/22 19:30:18

文章目录

  • 各分支命名规范
  • gitee基本开发流程及定义
    • gitflow工作流
    • gitflow工作流常用分支
    • 主要工作流程
    • 命名规则
    • gitflow工作流程图
  • Git分支开发管理策略
    • 主分支Master
    • 开发分支Develop
      • Git创建Develop分支的命令:
      • 将Develop分支发布到Master分支的命令:
    • 临时性分支
    • 功能分支
      • 创建一个功能分支:
      • 开发完成后,将功能分支合并到develop分支:
      • 删除feature分支:
    • 预发布分支
      • 创建一个预发布分支:
      • 确认没有问题后,合并到master分支:
      • 再合并到develop分支:
      • 最后,删除预发布分支:
    • 修补bug分支
      • 创建一个修补bug分支:
      • 修补结束后,合并到master分支:
      • 再合并到develop分支:
      • 最后,删除"修补bug分支":
  • git开发版本号命名规范
    • 命名原则
    • 示例:
  • git 全局设置用户名、密码、邮箱
    • 查看git配置信息
    • 查看git用户名、密码、邮箱的配置
    • 设置git用户名、密码、邮箱的配置
    • 设置git全局用户名、密码、邮箱的配置(全局配置)
    • 修改git用户名、密码、邮箱的配置(跟设置语法一样,没有用户名就添加,有了用户名就修改)
    • 修改git用户名、密码、邮箱的配置(全局配置)
  • 使用git-flow分支管理模型和Jenkins多分支流水线的应用
    • 目前存在的问题
    • 主分支
    • 临时分支
      • feature - 功能分支
        • 创建订单功能分支:
        • 完成订单功能后,切换到 develop,合并 feature-order:
      • release 预发布分支
      • fixbug 修复 bug 分支
    • git-flow 使用
      • 开发新功能
    • git-flow 在 CI/CD 中的应用


  • 注意
  1. 严禁所有人员在master节点和develop节点修改提交代码
  2. master和develop节点只允许合并
  3. master分支推送必须打上标签,并说明此次详细更改信息

各分支命名规范

  1. hotfix:以当前master版本最后一位加1,开发完成后合并至master和develop分支, master主分支打标签
    如:master版本为V5.0.1,此时的hotfix分支版本为V5.0.2
  2. feature:从develop分支创建,最后的版本号可自由定义,如1.0.0为当前功能的1.0.0版本
    a. 如:feature/wgz_liteflow_1.0.0
    b. 另一个同事开发的功能即为:feature/lnc_ordersBug_1.0.0
    c. 当feature分支合并至develop分支后,从develop分支拉出release分支,要求加版本号
  3. release:当feature分支合并至develop分支后,拉出新的release分支进行测试,如果出现问题可以release分支进行bug修复,进到bug修复完成,经负责人确定上线后进行合并至master和develop节点,如果暂时不上线,可先合并至develop分支。
    a. 命名如:release/wgz_liteflow_V5.1.0

gitee基本开发流程及定义

gitflow工作流

gitflow工作流是一种依赖于Git版本管理工具,按特定规范对项目开发、测试、上线流程进行管理的工作方式。它是一种为实现规范化管理的约定,它明确了各个分支的意义,使整个团队的分工协作更加清晰。

gitflow工作流常用分支

  1. 【master】
    ○ 主分支 , 产品的功能全部实现后 , 最终在master分支对外发布
    ○ 该分支为只读唯一分支 , 只能从其他分支(release/hotfix)合并 , 不能在此分支修改
    ○ 另外所有在master分支的推送应该打标签做记录,方便追溯
    ○ 例如release合并到master , 或hotfix合并到master
  2. 【develop】
    ○ 主开发分支 , 基于master分支克隆
    ○ 包含所有要发布到下一个release的代码
    ○ 该分支为只读唯一分支 , 只能从其他分支合并
    ○ feature功能分支完成 , 合并到develop(不推送)
    ○ develop拉取release分支 , 提测
    ○ release/hotfix 分支上线完毕 , 合并到develop并推送
  3. 【featrue】
    ○ 功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发
    ○ 功能开发完毕后合到develop分支(未正式上线之前不推送到远程中央仓库!!!)
    ○ feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选删除
  4. 【release】
    ○ 测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆
    ○ 主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后合并到develop/master分支并推送(完成功能) , 打Tag
    ○ 属于临时分支 , 功能上线后可选删除
  5. 【hotfix】
    ○ 补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复
    ○ 修复完毕后合并到develop/master分支并推送 , 打Tag
    ○ 属于临时分支 , 补丁修复上线后可选删除
    ○ 所有hotfix分支的修改会进入到下一个release

主要工作流程

  1. 初始化项目为gitflow , 默认创建master分支 , 然后从master拉取第一个develop分支
  2. 从develop拉取feature分支进行编码开发(多个开发人员拉取多个feature同时进行并行开发 , 互不影响)
  3. feature分支完成后 , 合并到develop(不推送 , feature功能完成还未提测 , 推送后会影响其他功能分支的开发),【合并feature到develop , 可以选择删除当前feature , 也可以不删除 . 但当前feature就不可更改了 , 必须从release分支继续编码修改】
  4. 从develop拉取release分支进行提测 , 提测过程中在release分支上修改BUG
  5. release分支上线后 , 合并release分支到develop/master并推送,合并之后 , 可选删除当前release分支 , 若不删除 , 则当前release不可修改 . 线上有问题也必须从master拉取hotfix分支进行修改
  6. 上线之后若发现线上BUG , 从master拉取hotfix进行BUG修改
  7. hotfix通过测试上线后 , 合并hotfix分支到develop/master并推送,合并之后 , 可选删除当前hostfix , 若不删除 , 则当前hotfix不可修改 , 若补丁未修复 , 需要从master拉取新的hotfix继续修改
  8. 当进行一个feature时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上【即合并develop到当前feature分支】
  9. 当进行一个release分支时 , 若develop分支有变动 , 如其他开发人员完成功能并上线 , 则需要将完成的功能合并到自己分支上, 即合并develop到当前release分支 (!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况)

命名规则

● master分支由项目架构、技术leader合并操作,任何人不可在此主分支开发。hotfix分支从master分支拉取
● develop分支由项目架构、技术leader、指定开发组长操作,只读,任何人不在此分支上开发。
● feature分支,由开发人员创建,多个分支,命名规则: feature/姓名_版本号_功能名称,开发人员每日都要从develop合并代码到自己的feature分支,开发完成后,再合并到develop。
● release待提测分支,从develop拉取release版本分支,命名规范:release/版本号,在此分支进行测试,bug修复,完成后打待上线tag,合并代码至develop,----->>>发布上线版本时再合并至master,打tag:规则为:版本号_上线日期_主要需求
● hotfix线上修复版本:从master拉取hotfix分支、命名规则: hotfix/版本号,修复完成,合并到develop和master
注:>>> 开发分支一旦合并至develop分支,即删除当前分支。

gitflow工作流程图

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


Git分支开发管理策略

主分支Master

首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。
在这里插入图片描述
Git主分支的名字,默认叫做Master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。

开发分支Develop

主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。
在这里插入图片描述
这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。

Git创建Develop分支的命令:

git checkout -b develop master

将Develop分支发布到Master分支的命令:

# 切换到Master分支  
git checkout master  
# 对Develop分支进行合并  
git merge --no-ff develop

这里稍微解释一下,上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。
在这里插入图片描述
使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。
在这里插入图片描述

临时性分支

  • 前面讲到版本库的两条主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。其实,常设分支只需要这两条就够了,不需要其他了。
    但是,除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:
  • 功能(feature)分支
  • 预发布(release)分支
  • 修补bug(fixbug)分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

功能分支

  • 接下来,一个个来看这三种"临时性分支"。
    第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop。

    在这里插入图片描述
    功能分支的名字,可以采用feature/开发人员名称_功能名_版本号的形式命名。如:feature/wgz_dictionary_1.1

创建一个功能分支:

git checkout -b feature/wgz_dictionary_1.1 develop

开发完成后,将功能分支合并到develop分支:

git checkout develop  
git merge --no-ff feature/wgz_dictionary_1.1

删除feature分支:

git branch -d feature/wgz_dictionary_1.1

预发布分支

  • 第二种是预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。
    预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Develop和Master分支。它的命名,可以采用release/开发人员名称_功能名称_版本号称的形式。如:release/wgz_add-user_1.2

创建一个预发布分支:

git checkout -b release/wgz_add-user_1.2 develop

确认没有问题后,合并到master分支:

git checkout master  
git merge --no-ff release/wgz_add-user_1.2 
# 对合并生成的新节点,做一个标签  
git tag -a 1.2

再合并到develop分支:

git checkout develop  
git merge --no-ff release/wgz_add-user_1.2

最后,删除预发布分支:

git branch -d release/wgz_add-user_1.2

修补bug分支

  • 最后一种是修补bug分支。软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。
    修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支。它的命名,可以采用fixbug/开发人员名称_bug_版本名称名称的形式。如:fixbug/wgz_add-user_1.1

    在这里插入图片描述

创建一个修补bug分支:

git checkout -b fixbug/wgz_add-user_1.1 master

修补结束后,合并到master分支:

git checkout master  
git merge --no-ff fixbug/wgz_add-user_1.1  
git tag -a 0.1.1

再合并到develop分支:

git checkout develop  
git merge --no-ff fixbug/wgz_add-user_1.1

最后,删除"修补bug分支":

git branch -d fixbug/wgz_add-user_v1.1

git开发版本号命名规范

命名原则

  1. 项目初版本时,版本号可以为 0.1.0;
  2. 当项目在进行了局部修改或 bug 修正时,主版本号和子版本号都不变,修正版本号加 1;
  3. 当项目在原有的基础上增加了部分功能时,主版本号不变,子版本号加 1,修正版本号复位为 0;
  4. 当项目在进行了重大修改或局部修正累积较多,而导致项目整体发生全局变化时,主版本号加 1;

示例:

  1. 主版本号改动:一期项目用0.1.0;二期项目用1.1.0;三期项目用2.1.0;
  2. 子版本号改动:增加了权限管理功能模块,版本号由0.1.3改为0.2.0;
  3. 修正版本号改动:修正了一个页面显示字符串,版本号由0.1.3改为0.1.4

git 全局设置用户名、密码、邮箱

  • git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

查看git配置信息

git config --list

查看git用户名、密码、邮箱的配置

git config user.name
git config user.password

设置git用户名、密码、邮箱的配置

git config user.name “wugz”
git config user.password “123456”
git config user.email “1053295500@qq.com”

设置git全局用户名、密码、邮箱的配置(全局配置)

# git config --global user.name 用户命
git config --global user.name wugz
# git config --global user.password 密码
git config --global user.password abc0506abc
# git config --global user.password 邮箱
git config --global user.email “1053295500@qq.com”

修改git用户名、密码、邮箱的配置(跟设置语法一样,没有用户名就添加,有了用户名就修改)

git config user.name “wugz”

修改git用户名、密码、邮箱的配置(全局配置)

git config --global user.name “wugz” 

使用git-flow分支管理模型和Jenkins多分支流水线的应用

目前存在的问题

  • 在开发过程中,团队中不同成员经常会同步开发不同的功能,可能会出现以下问题:

● 它们提交测试和部署到线上的时间往往不一样,如何清晰所属分支的职责?
● 不同功能可能会有相互依赖的代码,假设分属于不同的分支,如果其中一方想提交测试,必须先和另外一方合并,但另外一方还没到提交测试的时候,如果没有一个好的分支管理策略,就容易造成分支管理的混乱。
● 不同分支是否应该对应不同的环境,应该如何对应,jenkins 应该如何实现。

主分支

● master
● develop

  • master 对应着生产环境的代码。
    develop 为开发分支,当 develop 的代码达到稳定点并准备发布时,需将其合并至 master,然后使用版本号标记该次合并。

临时分支

  • 不同于主要分支,临时分支的生命周期有限,当使用完后需将其删除,临时分支可分为:

● feature
● release
● fixbug

  • 这些分支中的每一个都有特定的用途,并受严格的规则约束,即哪些分支可能是其原始分支,哪些分支必须是其合并目标。

feature - 功能分支

  • 从 develop 检出,必须合并回 develop。
    当开发某一功能时,从 develop 中检出 feature 分支,feature 分支在开发未完成时一直存在,直到开发完后合并到 develop,然后删除该分支。

创建订单功能分支:

git checkout -b feature/wgz_order_1.1 develop

完成订单功能后,切换到 develop,合并 feature-order:

# 切换到 develop
git checkout develop
# 合并
git merge --no-ff feature/wgz_order_1.1.0
# 删除 feature/wgz_order_1.1.0
git branch -d feature/wgz_order_1.1.0
# 推送 develop
git push origin develop
  • 该–no-ff 标志使合并始终创建一个新的提交对象,即使合并可以通过快进来执行。这样可以避免丢失有关要素分支历史存在的信息,并将所有添加了要素的提交分组在一起。

release 预发布分支

  • 从 develop 检出,必须合并到 develop 和 master。
    预发布分支通常用于在发布到测试环境的代码,出现问题直接在此版修复,待测试完成后,合并到 develop 和 master。
    创建 release 分支。从 develop 分支创建 release 分支。如当前 master 上的代码版本为 1.1.0,即将发布一个大版本,develop 已经准备就绪,创建一个带版本号的 release 分支:
# 创建 release/wgz_order_2.0.0 分支
git checkout -b release/wgz_order_2.0.0 develop
  • release/wgz_order_2.0.0 分支会存在一段时间,直到它可以发布时。不能在此分支上面开发新的功能,要开发新的功能,应该在 develop 分支上检出新的 featrue 分支,或者在 feature/* 主功能分支上检出。
    可以发布时,将release/wgz_order_2.0.0 合并到 master,并标记该次提交,另外还需要将其合并到 develop,以同步在 release/wgz_order_2.0.0 上作的修改:
# 切换到 master
git checkout master
# 合并 release/wgz_order_2.0.0
git merge --no-ff release/wgz_order_2.0.0
# 标记版本号
git tag -a 2.0.0
# 切换到 develop
git checkout develop
# 合并
git merge --no-ff release/wgz_order_2.0.0
# 删除 release/wgz_order_2.0.0
git branch -d release/wgz_order_2.0.0

fixbug 修复 bug 分支

  • 从 master检出,必须合并回 master、develop。
    如果在生产环境发现重大 bug,需要立即解决,可以创建 fixbug/wgz_order_2.0.1 分支,然后开始解决问题:
# 检出 fixbug/wgz_order_2.0.1
git checkout -b fixbug/wgz_order_2.0.1 master
  • 完成修复后合并分支:
# 合并 master
git checkout master
git merge --no-ff fixbug/wgz_order_2.0.1
git tag -a 2.0.1
# 合并 develop
git checkout develop
git merge --no-ff fixbug/wgz_order_2.0.1
# 删除 hotfix-2.0.1
git branch -d fixbug/wgz_order_2.0.1

git-flow 使用

  • 上面功能介绍的是如何使用 git-flow,发现操作过程还是有些繁琐的,其实业内存在一个库 gitflow,它是 git-flow 模型的具体实践。
    在它的 github README 中根据文档安装好 git-flow 和集成进 shell。- 查看 Installing git-flow & integration with your shell 小节
    安装好后执行 git flow init [-d] 初始化,然后将刚创建的本地分支都推送到远程 git push origin --all。

开发新功能

  • 如要同步开发账单、订单等功能,先创建一个主功能分支,再创建副功能分支:
git flow feature start feature/wgz_1.0
git flow feature start feature/wgz_order_1.0
git flow feature start feature/wgz_bill_1.0
  • 列出/开始/结束 feature 分支:
git flow feature
git flow feature start feature/wgz_1.0
git flow feature finish feature/wgz_1.0
  • 开发完成后:
git flow feature finish feature/wgz_1.0

其它类型的分支类似。

git-flow 在 CI/CD 中的应用

  • 假设接下来要开发版本为 v1.0.2,功能包含订单和财务模块,当前默认的分支只有 develop 和 master,首先创建 feature/wgz_order_1.0.2 和 feature/wgz_finance_1.0.2:
git flow feature start feature/wgz_order_1.0.2
git flow feature start feature/wgz_finance_1.0.2

# 推送到相应的 feature 分支
git flow feature publish feature/wgz_order_1.0.2
# 拉取相应的 feature 分支
git flow feature pull feature/wgz_order_1.0.2
  • 当订单先开发完成,想先部署到测试环境给到测试人员,需执行以下步骤:
# 完成订单功能开发,自动合并到 develop 并删除 feature-order
git flow feature finish feature/wgz_order_1.0.2
# develop 中的订单功能准备就绪,检出预发布分支,推送时会触发 jenkins 的构建任务,
# 自动部署到测试环境
git flow release start release/wgz_order_1.0.2
  • 在测试的过程中,需要修复问题,可以直接在 release/wgz_order_1.0.2 上修改,修改后提交会自动触发构建任务。当测试完没有问题时,这时候就需要部署到线上了,执行以下步骤:
# 合并到 master,删除 release/wgz_order_1.0.2
git flow release finish release/wgz_order_1.0.2
  • 部署到线上环境后,遇到需要紧急修复的 bug 时,在 master 上检出 fixbug 分支,用于修复 bug:
# 检出 hotfix/wgz_order_1.0.2
git flow hotfix start fixbug/wgz_order_1.0.2
# 合并到 master
git flow hotfix finish fixbug/wgz_order_1.0.2

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

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

相关文章

【windows编程之对话框】对话框原理,对话框的创建

文章目录 引言一.对话框原理1.对话框的分类2.对话框的基本使用2.自定义对话框窗口消息处理函数 二.模式对话框- 1.创建对话框- 2.对话框的关闭- 3.对话框消息 三.模式对话框创建过程实践四.无模式对话框 引言 在本章节中我们来讲解Windows/Win32编程中对话框的原理和对话框的创…

Ajax请求,基于JSON的数据交换 实例

前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>发送Ajax GET请求 展示学生信息列表</title> <script type"text/javascript"> w…

camunda任务监听器如何使用

在Camunda工作流引擎中&#xff0c;任务监听器是一种机制&#xff0c;用于在业务任务执行期间捕获特定事件并执行相应的操作。它们可以帮助您实现一些重要的任务&#xff0c;例如&#xff1a; 1、记录或更新业务数据&#xff1a;当任务完成或取消时&#xff0c;您可以使用任务…

本地搭建wamp服务器并内网穿透实现无公网IP远程访问

文章目录 前言1.Wamp服务器搭建1.1 Wamp下载和安装1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册2.1 本地网页发布2.2 Cpolar云端设置2.3 Cpolar本地设置 3. 公网访问测试4. 结语 转载自cpolar极点云的文章&#xff1a;无公网IP&#xff1f;教你在外远程访问本地Wamp服务器「…

【C++】入门基础

文章目录 1、命名空间1.1、命名空间的概念1.2、命名空间的定义1.3、命名空间的使用 2、初识cout和cin2.1、标准输入输出对象简介2.2、缓冲区2.3、cout2.4、cin 3、缺省参数3.1、全缺省参数3.2、半缺省参数3.3、注意事项 4、函数重载4.1、函数重载的概念4.2、函数重载的定义4.3、…

OpenCV实战——根据立体图像计算深度信息

OpenCV实战——根据立体图像计算深度信息 0. 前言1. 立体视觉系统2. 计算深度信息3. 完整代码相关链接 0. 前言 人类可以用两只眼睛构建三个维度世界&#xff0c;而为机器人配备两个摄像头时&#xff0c;机器人同样也可以做到这一点&#xff0c;这称为立体视觉 (stereo vision…

exe4j

exe4j是一种用于将Java程序打包成可执行文件&#xff08;.exe&#xff09;的软件工具。使用exe4j&#xff0c;开发人员可以将Java程序打包成可独立运行的.exe文件&#xff0c;并将所需的Java虚拟机&#xff08;JVM&#xff09;包含在内。exe4j提供了许多配置选项&#xff0c;可…

五、FM1288调试方案-调试原理

本篇只讲述调试原理,侧重流程、理论,不涉及细节,比如应该调哪一块、哪些寄存器这些。 文章目录 1. 结构框图1.1 回声消除原理1.2 硬件结构2. 调试方案2.1 uart串口调试2.2 I2C调试1. 结构框图 1.1 回声消除原理 回声消除的详细原理,牵涉到算法相关的东西,不太了解,只描…

二项分布的参数p的检验

设某事件发生的概率为p&#xff0c;做m次的独立检验&#xff0c;以X为发生的次数&#xff0c;则X服从二项分布B(m, p)&#xff0c;则针对X可以做出假设 定义一个合理的检验,&#xff0c;设置一个阈值C&#xff1a; F : 当 X < C时&#xff0c;接受H0&#xff0c;否则拒绝H0 …

[亲测有效] 如何实现vivo图案解锁

vivo是最受欢迎的智能手机品牌之一&#xff0c;拥有庞大的客户群。但是在使用vivo手机的过程中&#xff0c;难免会出现意外。其中最常见的是忘记密码。那么&#xff0c;如果您忘记了密码&#xff0c;如何解锁 vivo 手机呢&#xff1f;这是您需要知道的一切。本文将向您展示5种轻…

云原生应用环境中的权限提升

对于如今的现代数字应用程序&#xff0c;在操作事件期间管理访问权限对于确保企业的生产环境和基础架构安全都至关重要。一个被大家认可的基本安全原则是最小权限原则&#xff0c;基于该原则开发人员和运维人员应该具备尽可能小的权限&#xff0c;只访问必须的生产环境及数据&a…

牛客网剑指offer|中等题day2|JZ22链表中倒数最后k个结点(简单)、JZ35复杂链表的复制(复杂)、JZ77按之字形顺序打印二叉树(中等)

JZ22链表中倒数最后k个结点(简单) 链接&#xff1a;链表中倒数最后k个结点_牛客题霸_牛客网 /*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/ class Solution { public:/*** 代码中的类名、方法名、参数名已经指…

CRM系统的在线演示是什么?有什么作用?

CRM系统在线演示的作用是帮助企业选择适合的CRM系统。在线演示可以让企业更好地了解CRM系统是如何工作的&#xff0c;以及它如何能使他们的业务受益。在线演示实质上是CRM系统的虚拟演示&#xff0c;您可以清楚的知道它是如何工作的&#xff0c;以及如何通过定制来满足某些业务…

解释水波特效处理

这篇博文译自以下这篇文章——The Water Effect Explained 由于这篇文章主要用Pascal语言进行描述的。因此我后面会添加一些注释&#xff0c;并结合Apple提供的ripple相关的Demo给出一些额外的遵守GNU11规范的C代码。 介绍 在计算机图形中的许多特效中&#xff0c;水特效是一…

ResourceManager HA 原理

简介 为了解决 Yarn 中 ResourceManager 的单点故障问题&#xff0c;在 Hadoop 2.4 中新增了 ResourceManager HA 的能力&#xff0c; 该文章基于 Hadoop 3.1.1 进行讲解。 1.1. 名词定义 全称简称备注ResourceManagerRmZookeeperZK ResourceManager Ha 架构 ResourceMana…

Linux shell编程 数组 ^ 数组排序

数组定义 数组内数据类型可以为数值也可以为字符串。 若字符串类型需要使用 " " 包含以免空格扰乱数组。 方法1 空格分隔直接定义数组 arr(10 20 30 40 50) arr1(zhangsan lisi wangwu) 方法2 指定元素下标定义&#xff0c;若跳过元素不设置会显示为空 arr([0]1…

Python 密码破解指南:10~14

协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【OpenDocCN 饱和式翻译计划】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 收割 SB 的人会被 SB 们封神&#xff0c;试图唤醒 SB 的人是 SB 眼中的 SB。——SB 第三定律 十、加…

震惊!如果患上植物神经紊乱,就会诱发胃肠神经功能紊乱!

植物神经系统和胃肠系统是人体内重要的调节系统&#xff0c;它们分别负责着许多生物过程的调控。当这两个系统出现紊乱时&#xff0c;会对人体健康产生不良影响。本文将从植物神经紊乱与胃肠神经功能紊乱的关系、症状、治疗办法和生活预防方法四个方面进行探讨。 一、植物神经紊…

GoAccess 网站日志分析

GoAccess是一个开源且免费的网站日志分析和交互式WEB日志查看器&#xff0c;可在 Linux 系统的终端中或通过浏览器运行。使用它可让系统管理员视化的查看统计报告&#xff0c;这对于SEO以及运维来说非常有价值。 GoAccess支持几乎所有Web 日志格式&#xff0c;包含&#xff1a;…

数据结构-图的遍历和应用(DAG、AOV、AOE网)

目录 *一、广度优先遍历(BFS) 广度优先生成树 广度优先生成森林 *二、深度优先遍历 深度优先生成树 深度优先生成森林 二、应用 2.1最小生成树 *Prim算法 *Kruskal算法 2.2最短路径 *BFS算法 *Dijkstra算法 *Floyd算法 *2.3有向无环图(DAG网) *2.4拓扑排序(AOV网)…