Git常用操作学习
目录
- Git基础概述
1.1 什么是Git?
1.2 Git的优点 - Git工作流程
2.1 集中式工作流程
2.2 功能分支工作流程
2.3 Git Flow工作流程 - 克隆仓库
3.1 使用git clone
3.2 克隆特定分支 - 分支管理
4.1 创建分支
4.2 切换分支
4.3 合并分支
4.4 删除分支 - 提交和推送更改
5.1 查看状态
5.2 添加更改到暂存区
5.3 提交更改
5.4 推送到远程仓库 - 拉取和获取更新
6.1git fetch
与git pull
6.2 合并远程更改 - 解决冲突
7.1 理解冲突
7.2 手动解决冲突
7.3 使用工具解决冲突 - 使用Pull Request或Merge Request
8.1 创建Pull Request
8.2 代码审查与讨论
8.3 合并Pull Request - Git标签和版本发布
9.1 创建标签
9.2 推送标签
9.3 使用标签进行版本发布 - Git的远程管理
10.1 添加远程仓库
10.2 查看远程仓库
10.3 移除远程仓库 - Git的协作最佳实践
11.1 频繁提交
11.2 撰写清晰的提交信息
11.3 使用分支策略
11.4 代码审查 - Git工具和扩展
12.1 图形化Git工具
12.2 Git Hooks
12.3 Git Submodules - 常见问题与解决方法
13.1 如何回滚到之前的提交?
13.2 如何撤销暂存区的更改?
13.3 如何删除远程分支? - 总结
1. Git基础概述
1.1 什么是Git?
Git是一种分布式版本控制系统,用于跟踪源代码在开发过程中的变化。它允许多个开发者在同一个项目中协作,记录每一次代码的修改,方便版本回溯和协同工作。
关键特性:
- 分布式:每个开发者都有完整的代码库和历史记录,无需依赖中央服务器。
- 高效:Git的性能在处理大型项目时表现出色。
- 数据完整性:Git使用SHA-1哈希确保代码库的完整性和安全性。
- 支持非线性开发:通过分支和合并,支持复杂的开发流程。
1.2 Git的优点
- 速度快:Git的本地操作速度极快,几乎所有操作都是在本地完成的。
- 分支管理强大:轻量级的分支操作使得并行开发和特性开发更加便捷。
- 数据安全:Git确保数据的完整性和不可篡改性。
- 灵活性高:支持多种工作流程和开发模式,适应不同团队的需求。
- 广泛支持:与各种开发工具和平台(如GitHub、GitLab、Bitbucket)无缝集成。
2. Git工作流程
理解Git的工作流程是高效使用Git进行团队协作的基础。常见的工作流程包括集中式、功能分支和Git Flow等。
2.1 集中式工作流程
集中式工作流程类似于传统的版本控制系统(如SVN),所有开发者在一个主分支(通常是master
或main
)上进行工作。
步骤:
-
克隆仓库:
git clone https://github.com/username/repository.git
-
创建分支(可选):
git checkout -b feature-branch
-
进行更改并提交:
git add . git commit -m "添加新功能"
-
推送到远程仓库:
git push origin feature-branch
-
合并到主分支:
- 通过Pull Request或直接合并:
git checkout master git merge feature-branch git push origin master
优点:
- 简单直观,适合小团队或简单项目。
缺点:
- 主分支容易受到直接提交的影响,可能导致不稳定。
2.2 功能分支工作流程
功能分支工作流程鼓励为每个新功能或修复创建独立的分支,保持主分支的稳定性。
步骤:
-
克隆仓库:
git clone https://github.com/username/repository.git
-
创建并切换到新分支:
git checkout -b feature-new-feature
-
进行更改并提交:
git add . git commit -m "实现新功能"
-
推送到远程仓库:
git push origin feature-new-feature
-
创建Pull Request并合并:
- 在GitHub或其他平台上创建Pull Request,进行代码审查。
- 合并后删除功能分支:
git branch -d feature-new-feature git push origin --delete feature-new-feature
优点:
- 保持主分支的稳定性。
- 便于管理和追踪不同功能的开发。
缺点:
- 分支数量增多,可能需要更严格的管理。
2.3 Git Flow工作流程
Git Flow是一种更为复杂和结构化的工作流程,适用于大型项目和团队。它定义了明确的分支类型和合并策略。
主要分支:
master
:存储生产环境的代码。develop
:集成所有开发分支,作为下一个版本的基础。- 功能分支(
feature/*
):用于开发新功能,从develop
分支创建。 - 发布分支(
release/*
):准备新版本发布,从develop
分支创建。 - 修复分支(
hotfix/*
):紧急修复生产环境的问题,从master
分支创建。
步骤:
-
初始化Git Flow:
git flow init
-
开始新功能:
git flow feature start new-feature
-
完成新功能:
git flow feature finish new-feature
-
开始发布版本:
git flow release start 1.0.0
-
完成发布版本:
git flow release finish 1.0.0
-
开始修复紧急问题:
git flow hotfix start hotfix-issue
-
完成修复紧急问题:
git flow hotfix finish hotfix-issue
优点:
- 适用于复杂项目,提供明确的分支管理策略。
- 支持并行开发和版本发布。
缺点:
- 学习曲线较陡,适合有经验的团队。
- 分支较多,可能增加管理复杂性。
3. 克隆仓库
克隆仓库是开始一个Git项目的第一步。它将远程仓库复制到本地,允许开发者在本地进行开发和版本控制。
3.1 使用git clone
git clone
命令用于从远程仓库克隆一个完整的代码库到本地。
基本语法:
git clone <仓库URL>
示例:
git clone https://github.com/username/repository.git
解释:
- 该命令将在当前目录下创建一个名为
repository
的文件夹,包含远程仓库的所有文件和历史记录。
3.2 克隆特定分支
有时,您可能只需要克隆远程仓库中的特定分支,而不是整个仓库的所有分支。
语法:
git clone --branch <分支名> --single-branch <仓库URL>
示例:
git clone --branch develop --single-branch https://github.com/username/repository.git
解释:
--branch develop
指定要克隆的分支为develop
。--single-branch
仅克隆指定的分支,避免下载其他分支的数据。
4. 分支管理
分支是Git中用于隔离开发工作的核心概念。通过分支,团队成员可以独立开发不同的功能,避免相互干扰。
4.1 创建分支
使用git branch
命令可以创建新的分支。
语法:
git branch <分支名>
示例:
git branch feature-login
解释:
- 该命令将在当前仓库中创建一个名为
feature-login
的新分支,但不会自动切换到该分支。
4.2 切换分支
使用git checkout
或git switch
命令可以在不同分支之间切换。
使用git checkout
:
git checkout <分支名>
示例:
git checkout feature-login
使用git switch
(推荐):
git switch <分支名>
示例:
git switch feature-login
解释:
git checkout
和git switch
可以切换到指定的分支。git switch
是较新的命令,专门用于分支切换,更加直观。
4.3 合并分支
合并分支是将一个分支的更改集成到另一个分支的过程。通常,开发者在完成一个功能后,将其合并到主分支。
语法:
git merge <分支名>
示例:
git checkout master
git merge feature-login
解释:
- 首先切换到目标分支(如
master
)。 - 使用
git merge
将feature-login
分支的更改合并到master
分支。
4.4 删除分支
在分支合并完成后,可以删除不再需要的分支,以保持仓库的整洁。
语法:
git branch -d <分支名>
示例:
git branch -d feature-login
解释:
-
-d
选项用于删除已合并的分支。 -
如果分支未合并,使用
-D
强制删除:git branch -D <分支名>
5. 提交和推送更改
在Git中,提交和推送是记录和共享更改的关键步骤。
5.1 查看状态
使用git status
命令可以查看当前工作区和暂存区的状态,了解哪些文件被修改、添加或删除。
示例:
git status
输出示例:
On branch feature-login
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: app.pyno changes added to commit (use "git add" and/or "git commit -a")
解释:
- 显示当前分支、未暂存的更改、未跟踪的文件等信息。
5.2 添加更改到暂存区
使用git add
命令将更改添加到暂存区,为提交做准备。
语法:
git add <文件名>
示例:
git add app.py
添加所有更改:
git add .
解释:
git add <文件名>
将指定文件的更改添加到暂存区。git add .
将当前目录下所有更改的文件添加到暂存区。
5.3 提交更改
使用git commit
命令将暂存区的更改提交到本地仓库。
语法:
git commit -m "提交信息"
示例:
git commit -m "实现用户登录功能"
解释:
-m
选项用于添加提交信息,描述本次提交的更改内容。
5.4 推送到远程仓库
使用git push
命令将本地仓库的提交推送到远程仓库,供团队成员共享。
语法:
git push <远程名> <分支名>
示例:
git push origin feature-login
解释:
origin
是默认的远程仓库名称。feature-login
是要推送的分支名称。
6. 拉取和获取更新
在团队协作中,及时获取和合并他人的更改是保持代码同步的关键。
6.1 git fetch
与git pull
git fetch
:从远程仓库获取最新的更改,但不自动合并到本地分支。git pull
:相当于git fetch
加上git merge
,从远程仓库获取并自动合并到当前分支。
使用git fetch
:
git fetch origin
使用git pull
:
git pull origin master
解释:
git fetch origin
会获取远程origin
仓库的所有更新,但不会改变本地代码。git pull origin master
会获取远程origin
仓库的master
分支的更改,并将其合并到本地master
分支。
6.2 合并远程更改
在使用git fetch
后,可以手动合并远程更改到本地分支。
步骤:
-
获取远程更新:
git fetch origin
-
合并到当前分支:
git merge origin/master
解释:
git fetch
更新本地的远程跟踪分支。git merge
将远程更改合并到当前分支。
7. 解决冲突
在多人协作开发中,代码冲突是不可避免的。Git提供了工具和方法来解决这些冲突。
7.1 理解冲突
冲突发生在两个分支的更改无法自动合并时。通常是因为两个分支对同一文件的同一部分进行了不同的修改。
示例:
git merge feature-login
输出:
Auto-merging app.py
CONFLICT (content): Merge conflict in app.py
Automatic merge failed; fix conflicts and then commit the result.
解释:
- Git在合并过程中发现
app.py
文件存在冲突,需要手动解决。
7.2 手动解决冲突
手动解决冲突需要编辑冲突文件,选择保留哪部分代码或进行修改。
步骤:
-
打开冲突文件:
- 冲突部分会被标记为如下格式:
<<<<<<< HEAD print("Hello from master branch") ======= print("Hello from feature branch") >>>>>>> feature-login
-
编辑文件,选择保留的代码:
- 可以选择保留主分支的代码、功能分支的代码,或合并两者:
print("Hello from both branches")
-
标记冲突已解决:
git add app.py
-
提交合并结果:
git commit -m "解决app.py的合并冲突"
解释:
- 冲突标记
<<<<<<<
,=======
,>>>>>>>
用于区分不同分支的更改。 - 需要根据实际情况手动编辑,确保代码的正确性。
7.3 使用工具解决冲突
Git提供了多种工具来辅助解决冲突,如git mergetool
,以及第三方的图形化工具。
使用git mergetool
:
-
配置默认的合并工具(如
vimdiff
、meld
):git config --global merge.tool vimdiff
-
启动合并工具:
git mergetool
使用图形化工具:
-
Meld:
git config --global merge.tool meld
git mergetool
-
KDiff3:
git config --global merge.tool kdiff3
git mergetool
解释:
- 图形化工具提供直观的界面,帮助开发者更方便地比较和合并代码。
8. 使用Pull Request或Merge Request
Pull Request(GitHub)或Merge Request(GitLab)是团队协作中用于代码审查和合并的机制。
8.1 创建Pull Request
步骤:
-
推送分支到远程仓库:
git push origin feature-login
-
在GitHub/GitLab上创建Pull Request:
- 访问仓库页面,点击“Compare & pull request”或“New Merge Request”。
- 选择要合并的源分支和目标分支。
- 填写标题和描述,提交Pull Request。
解释:
- Pull Request允许团队成员审查代码,讨论更改,并在合并前进行反馈和改进。
8.2 代码审查与讨论
Pull Request提供了一个平台,团队成员可以对代码进行审查、评论和讨论。
最佳实践:
- 撰写清晰的描述:说明更改的目的、实现方式和影响。
- 保持小而专注:每个Pull Request应尽量只包含一个功能或修复,便于审查。
- 回应反馈:积极回应审查意见,进行必要的修改和改进。
8.3 合并Pull Request
在代码审查通过后,可以将Pull Request合并到目标分支。
步骤:
- 点击“Merge”按钮:
- 在GitHub上,点击“Merge pull request”。
- 在GitLab上,点击“Accept Merge Request”。
- 选择合并方式(如Squash, Rebase等)。
- 确认合并。
解释:
- 合并后,远程仓库的目标分支将包含Pull Request的更改。
- 可以选择合并策略,根据团队需求决定是否保留所有提交记录。
9. Git标签和版本发布
Git标签用于标记特定的提交点,常用于版本发布和标识重要里程碑。
9.1 创建标签
有两种类型的标签:轻量标签和附注标签。
轻量标签:
git tag <标签名>
示例:
git tag v1.0.0
附注标签:
git tag -a <标签名> -m "标签描述"
示例:
git tag -a v1.0.0 -m "发布版本1.0.0"
解释:
- 轻量标签类似于书签,直接指向特定的提交。
- 附注标签包含更多信息,如标签作者、日期和描述。
9.2 推送标签
创建标签后,需要将其推送到远程仓库。
推送单个标签:
git push origin <标签名>
示例:
git push origin v1.0.0
推送所有标签:
git push origin --tags
解释:
--tags
选项将本地所有标签推送到远程仓库。
9.3 使用标签进行版本发布
标签常用于标记发布版本,便于回溯和版本管理。
示例:
-
创建附注标签:
git tag -a v1.0.0 -m "发布版本1.0.0"
-
推送标签:
git push origin v1.0.0
-
在GitHub/GitLab上发布版本:
- 访问仓库页面,导航到“Releases”。
- 点击“Draft a new release”,选择标签,填写发布说明,发布版本。
解释:
- 在发布页面,团队可以提供详细的版本说明、变更日志和下载链接,方便用户和开发者获取特定版本的代码。
10. Git的远程管理
远程仓库是团队协作的基础,通过管理远程仓库,团队成员可以共享代码和更改。
10.1 添加远程仓库
使用git remote add
命令可以为本地仓库添加新的远程仓库。
语法:
git remote add <远程名> <仓库URL>
示例:
git remote add origin https://github.com/username/repository.git
解释:
origin
是默认的远程仓库名称,可以根据需要更改。- 远程仓库允许多名开发者共享和协作。
10.2 查看远程仓库
使用git remote -v
命令可以查看当前配置的远程仓库。
示例:
git remote -v
输出示例:
origin https://github.com/username/repository.git (fetch)
origin https://github.com/username/repository.git (push)
解释:
- 显示远程仓库的名称和对应的URL。
10.3 移除远程仓库
使用git remote remove
命令可以移除不再需要的远程仓库。
语法:
git remote remove <远程名>
示例:
git remote remove origin
解释:
- 该命令会从本地Git配置中移除指定的远程仓库。
11. Git的协作最佳实践
在团队合作中,遵循Git的最佳实践可以提高协作效率,减少冲突和错误。
11.1 频繁提交
- 理由:小而频繁的提交便于追踪更改,减少冲突风险。
- 实践:
- 每完成一个功能或修复一个问题后立即提交。
- 避免一次性提交大量更改。
示例:
git add feature-login.py
git commit -m "实现用户登录功能"
11.2 撰写清晰的提交信息
- 理由:清晰的提交信息有助于团队成员理解更改内容和目的。
- 实践:
- 使用简洁明了的标题。
- 描述更改的具体内容和原因。
示例:
git commit -m "修复登录页面的表单验证错误"
11.3 使用分支策略
- 理由:合理的分支策略可以组织开发流程,避免不同功能的更改相互干扰。
- 实践:
- 为每个新功能或修复创建独立分支。
- 定期合并主分支的更改到功能分支,保持同步。
示例:
git checkout -b feature-signup
11.4 代码审查
- 理由:代码审查可以提高代码质量,发现潜在的问题,促进团队知识共享。
- 实践:
- 在合并Pull Request前进行审查。
- 提供建设性的反馈,确保代码符合团队标准。
步骤:
- 创建Pull Request:
- 开发者提交更改并创建Pull Request。
- 审查代码:
- 团队成员检查代码,提出改进建议。
- 合并Pull Request:
- 审查通过后,合并到主分支。
12. Git工具和扩展
Git的功能可以通过各种工具和扩展进一步增强,提升开发效率和协作体验。
12.1 图形化Git工具
图形化工具提供直观的界面,简化Git操作,适合不熟悉命令行的用户。
常用工具:
-
GitKraken:
- 功能强大,支持分支管理、冲突解决等。
- GitKraken官网
-
SourceTree:
- 免费且易于使用,支持Git和Mercurial。
- SourceTree官网
-
GitHub Desktop:
- 与GitHub无缝集成,适合GitHub用户。
- GitHub Desktop官网
示例:
- 使用GitKraken:
- 下载并安装GitKraken。
- 打开GitKraken,克隆远程仓库。
- 使用图形界面进行分支管理、提交、合并等操作。
12.2 Git Hooks
Git Hooks是Git提供的一种机制,可以在特定事件发生时自动执行脚本,如提交前进行代码检查。
常用Hooks:
- pre-commit:在提交前执行,用于代码格式检查、运行测试等。
- post-commit:在提交后执行,用于通知、部署等。
- pre-push:在推送前执行,用于运行最后的检查。
示例:
-
创建
pre-commit
Hook:- 在项目的
.git/hooks/
目录下创建pre-commit
文件。
touch .git/hooks/pre-commit chmod +x .git/hooks/pre-commit
- 在项目的
-
编辑
pre-commit
文件:#!/bin/sh # 运行代码格式检查 flake8 . if [ $? -ne 0 ]; thenecho "代码格式检查失败,提交被取消。"exit 1 fi
-
效果:
- 在每次提交前,自动运行
flake8
进行代码格式检查,若失败则取消提交。
- 在每次提交前,自动运行
12.3 Git Submodules
Git Submodules允许在一个Git仓库中嵌套另一个仓库,适用于管理依赖项目或共享库。
常用命令:
-
添加子模块:
git submodule add <仓库URL> <路径>
示例:
git submodule add https://github.com/username/library.git libs/library
-
初始化子模块:
git submodule init
-
更新子模块:
git submodule update
-
克隆包含子模块的仓库:
git clone --recurse-submodules <仓库URL>
解释:
- 子模块允许项目依赖其他Git仓库,保持依赖关系的清晰和独立。
13. 常见问题与解决方法
在使用Git进行团队协作时,可能会遇到各种问题。以下是一些常见问题及其解决方法。
13.1 如何回滚到之前的提交?
有时需要撤销最近的更改,回到之前的提交状态。
使用git reset
:
-
软重置:保留工作目录和暂存区的更改。
git reset --soft <提交哈希>
-
混合重置(默认):保留工作目录的更改,重置暂存区。
git reset <提交哈希>
-
硬重置:重置工作目录和暂存区,丢弃所有更改。
git reset --hard <提交哈希>
示例:
git reset --hard HEAD~1
解释:
HEAD~1
表示当前提交的上一个提交,--hard
选项将工作目录和暂存区重置到该提交状态。
注意:
- 硬重置会丢弃未提交的更改,需谨慎使用。
13.2 如何撤销暂存区的更改?
有时不小心将更改添加到暂存区,需要将其撤回。
使用git reset
:
git reset <文件名>
示例:
git reset app.py
解释:
- 该命令将
app.py
从暂存区移除,但保留工作目录的更改。
13.3 如何删除远程分支?
删除不再需要的远程分支,以保持远程仓库的整洁。
语法:
git push <远程名> --delete <分支名>
示例:
git push origin --delete feature-login
解释:
- 该命令将远程仓库
origin
中的feature-login
分支删除。
14. 总结
Git是现代团队协作中不可或缺的版本控制工具,通过理解和掌握Git的核心概念、常用操作和最佳实践,团队成员可以高效地协同开发,确保代码的质量和项目的进度。
关键点总结:
- 基础操作:克隆、分支管理、提交和推送是Git的核心操作。
- 协作流程:使用功能分支和Pull Request进行代码审查和合并,保持主分支的稳定性。
- 冲突解决:了解冲突的原因和解决方法,确保团队协作的顺畅。
- 标签和版本发布:使用标签标记重要的提交点,便于版本管理和发布。
- 远程管理:有效管理远程仓库,确保团队成员之间的代码同步。
- 最佳实践:频繁提交、撰写清晰的提交信息、合理使用分支和代码审查等,提升团队协作效率。
- 工具和扩展:利用图形化工具、Git Hooks和子模块等扩展Git的功能,满足团队的不同需求。
- 问题解决:掌握常见问题的解决方法,提升使用Git的能力和自信。
通过系统地学习和实践Git操作,您可以在团队合作中更加高效地管理代码,推动项目的顺利进行。
相关文章:
Git常用操作学习
目录 Git基础概述 1.1 什么是Git? 1.2 Git的优点Git工作流程 2.1 集中式工作流程 2.2 功能分支工作流程 2.3 Git Flow工作流程克隆仓库 3.1 使用git clone 3.2 克隆特定分支分支管理 4.1 创建分支 4.2 切换分支 4.3 合并分支 4.4 删除分支提交和推送更改 5.1 查看状…...
2.5D视觉——Aruco码定位检测
目录 1.什么是Aruco标记2.Aruco码解码说明2.1 Original ArUco2.2 预设的二维码字典2.3 大小Aruco二维码叠加 3.函数说明3.1 cv::aruco::detectMarkers3.2 cv::solvePnP 4.代码注解4.1 Landmark图说明4.2 算法源码注解 1.什么是Aruco标记 ArUco标记最初由S.Garrido-Jurado等人在…...
【PSQLException: An I/O error occurred while sending to the backend.】
PSQLException: An I/O error occurred while sending to the backend. java项目定时任务执行耗时很长的sql语句(很多条sql,从很多表中,很多数据中查询,处理)总之,耗时很长(PG数据库)。报错I/O error,Caused by : java.net.SocketTimeoutException: Read time out场景…...
图像基础算法学习笔记
目录 概要 一、图像采集 二、图像标注 四、图像几何变换 五、图像边缘检测 Sobel算子 Scharrt算子 Laplacian算子 Canny边缘检测 六、形态学转换 概要 参考书籍:《机器视觉与人工智能应用开发技术》 廖建尚,钟君柳 出版时间:2024-…...
【Elasticsearch】01-ES安装
1. 安装 安装elasticsearch。 docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/usr/share/elasticsearch/plugins \--privileged \--networ…...
网络性能测试
一、iperf网络性能测试工具 测试udp丢包率 在服务器启动 iperf 服务端 iperf -p 9000 -s -u -i 1参数说明: -p : 端口号 -s : 表示服务端 -u : 表示 udp 协议 -i : 检测的时间间隔(单位,秒) 在客户端,启动 iperf 客户端 iperf -c xxx.xxx.14…...
docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled
无数次的拉镜像让人崩溃: rootnode11:~/ragflow/docker# more rag.sh #export HTTP_PROXYhttp://192.168.207.127:7890 #export HTTPS_PROXYhttp://192.168.207.127:7890 #export NO_PROXYlocalhost,127.0.0.1,.aliyun.com docker compose -f docker-compose-gpu-C…...
esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器
MQTT介绍 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息协议,旨在设备之间进行通信,尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1: 优点ÿ…...
OceanBase 升级过程研究(4.2.1.6-4.2.1.8)
模拟业务 使用benchmark加载10仓数据模拟业务场景 升级方法 使用滚动升级方式来进行OB升级。该方法前提是OB集群必须满足官方规定的高可用架构(如果 Zone 个数小于 3,滚动升级时则无法构成多数派), 滚动升级的原理就是轮流完成每个ZONE的升级工作,由于…...
ubuntu下怎么设置机器程序开机自启?
在 Ubuntu 中,可以通过多种方法设置程序或脚本在系统启动时自动运行。以下是几种常见方法: 方法 1:使用 crontab crontab 是一个定时任务管理工具,可以用来设置程序在开机时自动运行。 1. 打开终端,编辑当前用户的 …...
Cesium 相机系统
Cesium 的相机系统是其 3D 地球渲染引擎的重要组成部分,它控制用户在虚拟地球上的视图和交互体验。Cesium 的相机系统具备灵活性和强大的功能,允许开发者自定义视图、导航和交互方式。以下是 Cesium 相机系统的主要特点和功能: 1. 相机的基本…...
数据结构(基本概念及顺序表——c语言实现)
基本概念: 1、引入 程序数据结构算法 数据: 数值数据:能够直接参加运算的数据(数值,字符) 非数值数据:不能够直接参加运算的数据(字符串、图片等) 数据即是信息的载…...
ZYNQ程序固化——ZYNQ学习笔记7
一、ZYNQ启动过程 二、 SD卡启动实操 1、对ZYNQ进行配置添加Flash 2、添加SD卡 3、重新生成硬件信息 4、创建vitis工程文件 5、勾选板级支持包 6、对系统工程进行整体编译,生成两个Debug文件,如图所示。 7、插入SD卡,格式化为 8、考入BOOT.…...
labview使用报表工具从数据库导出数据
之前写了一篇labview从数据库导出数据到excel电子表格,但是是基于调用excel的activeX控件,有时候会有一些bug,就比如我工作机就无法显示方法,后面大哥指点才知道没有的原因是excel安装不完整。像我的工作机就没有这个选项。就需要…...
#define定义宏(2)
大家好,今天给大家分享两个技巧。 首先我们应该先了解一下c语言中字符串具有自动连接的特点。注意只有将字符串作为宏参数的时候才可以把字符串放在字符串中。 下面我们来讲讲这两个技巧 1.使用#,把一个宏参数变成对应的字符串。 2.##的作用 可以把位…...
CentOS网络配置
上一篇文章:VMware Workstation安装Centos系统 在CentOS系统中进行网络配置是确保系统能够顺畅接入网络的重要步骤。本文将详细介绍如何配置静态IP地址、网关、DNS等关键网络参数,以帮助需要的人快速掌握CentOS网络配置的基本方法和技巧。通过遵循本文的…...
基于vue框架的的网上宠物交易管理系统46sn1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
系统程序文件列表 项目功能:用户,宠物分类,宠物信息 开题报告内容 基于Vue框架的网上宠物交易管理系统开题报告 一、研究背景 随着互联网技术的飞速发展和人们生活水平的提高,宠物已成为许多家庭的重要成员。宠物市场的繁荣不仅体现在实体店的遍地开…...
MySQL数据库:SQL语言入门 【2】(学习笔记)
目录 2,DML —— 数据操作语言(Data Manipulation Language) (1)insert 增加 数据 (2)delete 删除 数据 truncate 删除表和数据,再创建一个新表 (3…...
MySQL深度剖析-索引原理由浅入深
什么是索引? 官方上面说索引是帮助MySQL高效获取数据的数据结构,通俗点的说,数据库索引好比是一本书的目录,可以直接根据页码找到对应的内容,目的就是为了加快数据库的查询速度。 索引是对数据库表中一列或多列的值进…...
路径规划——RRT-Connect算法
路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展,引入了双树生长,分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…...
数据科学与SQL:如何计算排列熵?| 基于SQL实现
目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大,说明系统越混乱,携带的信息越少;熵越小,说明系统越有序,携带的信息越多。在传感…...
Redis/Codis性能瓶颈揭秘:网卡软中断的影响与优化
目录 现象回顾 问题剖析 现场分析 解决方案 总结与反思 1.调整中断亲和性(IRQ Affinity): 2.RPS(Receive Packet Steering)和 RFS(Receive Flow Steering): 近期,…...
微知-DOCA ARGP参数模块的相关接口和用法(config单元、params单元,argp pipe line,回调)
文章目录 1. 背景2. 设置参数的主要流程2.1 初始化2.2 注册某个params的处理方式以及回调函数2.4 定义好前面的params以及init指定config地点后start处理argv 3. 其他4. DOCA ARGP包相关4.1 主要接口4.2 DOCA ARGP的2个rpm包4.2.1 doca-sdk-argp-2.9.0072-1.el8.x86_64.rpm4.2.…...
PostgreSQL高可用Patroni安装(超详细)
目录 一 安装Patroni 0 Patroni 对Python的版本要求 1 卸载原来的Python 3.6 版本 2 安装Python 3.7 之上版本 3 安装依赖 psycopg3 4 安装patroni 5 卸载 patroni 二 安装ETCD 1 使用 yum 安装 etcd 2 etcd 配置文件 3 管理 etcd 4 设置密码 5 常用命令 三 安装…...
mcu之,armv7架构,contex-M4系列,时钟树,中断,IO架构(一)
写这篇文章的目的,是记录一下arm架构的32mcu,方便记忆芯片架构原理,方便我展开对,BootLoader的研究。 arm架构,时钟树,先做个记录,有空写。...
论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区)
目录 论文解析:基于区块链的去中心化服务选择,用于QoS感知的云制造(四区) 基于区块链的去中心化云制造服务选择方法 一、核心内容概述 二、核心创新点及原理与理论 三、实验与理论分析 PBFT(实用拜占庭容错) 论文解析:基于区块链的去中心化服务选择,用于QoS感知的…...
详细解析STM32 GPIO引脚的8种模式
目录 一、输入浮空(Floating Input):GPIO引脚不连接任何上拉或下拉电阻,处于高阻态 1.浮空输入的定义 2.浮空输入的特点 3.浮空输入的应用场景 4.浮空输入的缺点 5.典型配置方式 6.注意事项 二、输入上拉(Inpu…...
【hacker送书第16期】Python数据分析、挖掘与可视化、AI全能助手ChatGPT职场工作效率提升技巧与案例
解锁数据分析与AI应用的双重秘密:全面推广《Python数据分析、挖掘与可视化从入门到精通》与《AI全能助手ChatGPT职场工作效率提升技巧与案例》 前言Python数据分析、挖掘与可视化从入门到精通💕内容简介获取方式 AI全能助手ChatGPT职场工作效率提升技巧与…...
翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
引言:自2021年起,翼鸥教育便开始应用OceanBase社区版,两年间,先后部署了总计12套生产集群,其中核心集群占比超过四分之三,所承载的数据量已突破30TB。自2022年10月,OceanBase 社区发布了4.2.x 版…...
WebGIS开发中不同坐标系坐标转换问题
在 JavaScript 中,使用 proj4 库进行坐标系转换是一个非常常见的操作。proj4 是一个支持多种坐标系的 JavaScript 库,提供了从一种坐标系到另一种坐标系的转换功能。 以下是使用 proj4 进行坐标系转换的基本步骤: 1. 安装 proj4 你可以通过…...
各大网站rss地址/阿里巴巴关键词排名优化
创建标量函数注意事项 在 SQL Server 和 Azure SQL Database 中创建用户定义函数。 用户定义函数是接受参数、执行操作(例如复杂计算)并将操作结果以值的形式返回的 Transact-SQL 或公共语言运行时 (CLR) 例程。 返回值可以是标量(单个&#…...
企业网站如何做推广/百度小说排行榜前十
MyBatis英文文档https://blog.mybatis.org/ MyBatis与SpringBoot的整合文档在这里看...
劳务外包公司/宁波seo关键词排名优化
说明:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。装饰模式的特点;(1) 装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对…...
便宜网站建设成都/网店运营推广方案
背景 前不久在调试一个与导出符号相关的bug,问题大概如此: 模块A.so在堆上构造了一个对象即 CTest *one new CTest; , CTest在A.so定义,后来使用one->AMemFunc();,即调用一个成员函数时崩溃。原来在另一个模块B.so(比A.so先加…...
wordpress怎么更改域名/网站的优化策略方案
作者:张丹青 编辑:毕小烦 普通用户如何评价一个网站的体验好不好呢? 除了满足他的功能需求以外,用得爽不爽可能是最大的评估因素。这个爽不爽可以简单理解为快不快,好不好看,是不是符合他的操作习惯等等。…...
中国摄影/关键seo排名点击软件
进程: 进程,线程由操作系统控制;协程(具体某一函数)由程序员操控。 curl访问网站 signal:ctrl c 结束程序 就是信号 RPC:进程在执行过程中,有一段是在远程主机上执行后再返回主机。 目前计算机工作状态&am…...