Git协作

文章目录

  • Git协作
    • 冲突
      • 冲突的发生情况
      • 解决冲突
      • 如何处理冲突
    • 1 分支
      • 1.1 什么是Git分支
      • 1.2 创建分支
    • 2 切换分支
      • 2.1 指向分支
      • 2.2 暂存分支
        • 切换分支与未提交更改的处理
        • 使用 Stash 临时保存更改
        • Stash 的工作原理:
        • 场景设定
        • 使用 Git Stash
    • 3 远程分支
      • 3.1 快进合并
        • 快进合并的工作机制
        • 快进合并的场景
        • 非快进合并
        • 快进合并的影响
      • 3.2 拉取(git pull)
      • 3.3 获取(git fetch)
        • `git fetch` vs. `git pull`
        • 具体使用示例
      • 3.4 推送(git push)
    • 4 分支的工作流程
      • 1. 主分支(Main Branch)
      • 2. 功能分支(Feature Branches)
      • 3. 发布分支(Release Branches)
      • 4. 修补分支(Hotfix Branches)
      • 5. 开发分支(Development Branch)
      • 4.1 主分支
      • 4.2 功能发布
      • 4.3 发布分支
      • 4.4 修补分支
      • 4.5 开发分支
      • 4.6 Git分支工作流程示例
      • 分支策略工作流程步骤详解
        • 1. **发现生产中的Bug**
        • 2. **创建Bug修复分支**
        • 3. **修复Bug并合并**
        • 4. **返回到功能分支**
        • 5. **同步开发分支的更改**
        • 6. **使用变基进行同步**
        • 7. **继续功能开发**
    • 5 整合分支
      • 5.1 合并分支
      • 5.2 将分支变基
    • 6 标签
    • 7 查看变更
    • 其他
      • git status
      • git log
      • 总结

Git协作

冲突

在版本控制系统中,特别是在使用Git时,冲突(Conflict)指的是当多个团队成员对同一个文件的相同部分进行更改并尝试合并这些更改时发生的问题。冲突通常出现在合并分支、重基(rebase)操作或应用补丁时,因为这些操作涉及将一个分支的更改整合到另一个分支上。

冲突的发生情况

冲突发生的典型情况包括:

  1. 编辑冲突
    两个或更多开发者修改了同一个文件的同一部分。例如,如果开发者A删除了一个函数,而开发者B在同一函数中添加了一些新代码,当这两个分支合并时,Git无法自动决定哪个版本是正确的。

  2. 文件冲突
    一个开发者修改了一个文件,而另一个开发者删除了同一个文件,或两个开发者重命名/移动了同一个文件但目标不同。

解决冲突

当冲突发生时,Git会标记冲突的文件,并在文件内容中插入特定的标记,指示冲突的位置。这些标记分为以下几部分:

  • 开始冲突标记 <<<<<<<:此标记后跟的是当前分支的内容。
  • 分隔符 =======:分隔当前分支内容和其他分支的内容。
  • 结束冲突标记 >>>>>>>:此标记后跟的是合并进来的分支的内容。

例如,如果在两个分支上对同一文件的同一行进行了不同的更改,Git无法自动合并,文件将包含类似以下内容:

<<<<<<< HEAD
console.log("This is the version in the current branch.");
=======
console.log("This is the version in the branch being merged.");
>>>>>>> feature-branch

如何处理冲突

解决冲突通常涉及以下步骤:

  1. 识别冲突
    使用 git status 查看哪些文件存在冲突。

  2. 手动编辑文件
    打开冲突文件,查看冲突标记,并决定保留哪个版本的更改,或者可能合并这两个版本的更改。

  3. 标记文件为已解决
    解决完冲突后,使用 git add <file> 命令将文件标记为已解决。这告诉Git您已经手动解决了这些冲突。

  4. 完成合并
    一旦所有冲突都被解决并标记,完成合并过程,通常是通过 git commit 命令。通常,Git会提供一个默认的合并提交消息,确认即可。

处理冲突需要细致的注意力,确保合并后的结果符合预期,同时保持代码的功能和完整性。在团队环境中,有效的沟通和代码审查可以大大减少冲突的发生。

1 分支

1.1 什么是Git分支

在处理不同任务的时候开不同的分支,把不同的任务区别开

Diagram of git branches.

多个不同的分支可以合并成一个分支,各个分支互不影响,除非拉取新的更改

Diagram of multiple projects.

为每个任务创建分支是个值得采用的做法,可以更好的追溯变更。

1.2 创建分支

创建新的分支不会更改存储库,只是指出了提交。如下图所示,使用 git branch 命令创建一个名为issue1的分支,存储库将保持不变,只是为当前提交添加了一个新指针。

Diagram of creating branches.

2 切换分支

git checkout 命令可更新工作树中的文件,以匹配存储在您希望切换到的分支中的版本。类似于切换目录或者工作区。

2.1 指向分支

HEAD 用于表示分支的当前快照。对于一个新的存储库,在默认情况下,Git 会将 HEAD 指向主分支。更改 HEAD 指向的位置将更新您的活动分支。
(代字号) 和 ^ (插入符号) 指向相对于特定提交的位置。这些符号与提交引用一起使用,通常是 HEAD 或提交哈希(hash)。
  • ~ 指的是祖先 (多少代取决于~后的数字)。
    • HEAD~1 指的是提交的第一个父级。
    • HEAD~2 指的是提交的第一个祖父级。
  • ^ 指的是合并提交的父级。
    • HEAD^1 指的是 HEAD 的第一个父级,其中 head 是合并提交。
    • HEAD^2 指的是 HEAD 的第一个祖父级,其中 head 是合并提交。

合并提交中的提交可以有多个父项。

Diagram of git symbols pointing to specific positions.

2.2 暂存分支

当您在使用Git进行版本控制时,可能会遇到需要在多个分支之间切换的情况,同时又希望保留未提交的更改。这时,Git提供了一些策略来处理这些未提交的更改,以便您可以无碍地在不同分支间进行工作。

切换分支与未提交更改的处理
  1. 基本行为

    • 当您在工作树中有未提交的更改(包括新文件、修改或删除的文件)时,这些更改可以被带到新分支上,前提是不会与新分支的文件产生冲突。
    • 如果您提交了这些更改,它们将仅存在于您切换到的新分支上。
  2. 冲突防止切换

    • 如果存在冲突(即,当前分支的未提交更改与目标分支的文件内容不兼容),Git不会允许您直接切换分支。这是为了防止潜在的代码丢失。
使用 Stash 临时保存更改

为了解决在分支间切换时带来的问题,Git 提供了一个称为 stash 的功能,允许您临时存储未提交的更改,以便您可以清洁地切换到其他分支继续工作。

Stash 的工作原理:

3 远程分支

3.1 快进合并

在Git中,快进合并(fast-forward merge)是一种特殊类型的合并,它发生在当一条分支可以直接前进到另一条分支的末端时,无需进行任何实际的合并操作。这种情况通常发生在没有新的并行提交影响这两个分支的情况下,即当前分支的末端提交是要合并分支的基础上直接发展出来的提交。

快进合并的工作机制
  1. 简化的视图
    当一个分支的所有提交都在另一个分支的直接历史线上时,就可以进行快进合并。这意味着可以简单地将接收分支的指针(HEAD)前移到源分支的最新提交,而不需要创建一个新的合并提交。

  2. 没有分支点
    快进合并不会创建一个新的合并提交,因为它仅仅涉及指针的移动。这样做保持了项目历史的线性和简洁。

快进合并的场景

假设您有两个分支:mainfeaturefeature 分支从main分支分出来,main分支在此期间没有新的提交,而feature分支有若干提交。当你决定将feature分支合并回main分支时:

  • 操作

    git checkout main
    git merge feature
    
  • 结果
    如果main分支在feature分出后没有新的提交,Git会执行快进合并,直接将main分支的HEAD指针移动到feature分支的最新提交。这样,main分支现在包含了所有feature分支的更改。

非快进合并

相对于快进合并,非快进合并发生在当目标分支自分支点以来有新的提交时,即两个分支都有各自独立的提交。在这种情况下,Git无法简单地进行指针前移,因为这样会丢失目标分支上的更改。

  • 操作
    如果你想确保即使可以进行快进合并也要创建一个新的合并提交,可以使用--no-ff选项:

    git merge --no-ff feature
    
  • 结果
    这将强制Git创建一个新的合并提交,即使是快进合并也不例外。这样做可以保留分支信息和合并历史。

快进合并的影响

快进合并的优点是保持了历史的清洁和线性,但在某些情况下,保留分支的合并历史(非快进合并)可能更有助于了解项目历史的结构和重要决策。选择使用哪种合并策略取决于团队的偏好和项目的特定需求。

3.2 拉取(git pull)

您可以使用 git pull 命令将远程存储库中的最新更改应用到本地存储库。

例如,假设远程分支位于本地分支的上游。远程分支将包含本地分支的所有更改,如下所示。

Diagram displaying an updatream branch.

  • 远程分支在本地分支的上游。

在这种情况下,如果我们要将远程分支 (origin/main) 的合并应用到我们的本地分支 (main),这将是一个快进合并。

Diagram displaying a fast-forward merge.

但是如果本地 main 分支中的更改不存在于远程 origin/main 分支中,则拉取命令将执行合并,且将创建将这些更改绑定在一起的合并提交。

Diagram displaying a merge and commit before a pull.

  • 如果本地分支与远程分支不同,Git 必须在拉取之前合并和提交。

执行拉取时,会在本地存储库中自动创建合并提交。如果存在冲突,您将必须解决冲突并手动提交合并。

如果没有冲突,提交将自动合并。

Diagram displaying no conflict auto merge.

3.3 获取(git fetch)

只要没有冲突,在执行拉取时,来自远程分支的更改会自动合并到您当前的本地分支。如果您想获取远程的修改但又不想将它们合并到您当前的本地分支中,您可以执行 git fetch 命令。

获取将从远程下载本地分支上尚不存在的更改。获取FETCH_HEAD ref 将跟踪从远程存储库中获取的更改。

当远程和本地分支都包含不同的后代时,修订历史记录将如下所示:

Diagram displaying revision history of branches with different mains.远程和本地分支具有不同 main 时的修订历史记录。

更改获取后,您可以通过合并获取_HEAD 或执行拉取将这些更改应用到本地存储库。

Diagram displaying changes applied to local repo after mergeing.合并后,更改将应用于本地存储库。

一旦获取FETCH_HEAD合并,修订历史记录将产生与git pull操作相同的结果。拉取是同时执行获取和合并操作。

git fetch vs. git pull
  1. git fetch

    • 用途git fetch 仅仅从远程仓库下载到本地仓库中尚不存在的更改,但不会自动合并或修改您的当前工作。
    • 结果:执行 git fetch 后,您的本地仓库将包含远程仓库的最新更改,但这些更改不会影响您的任何工作分支,除非您显式合并它们。
    • 修订历史FETCH_HEAD 是一个特殊的引用,它指向刚刚从远程仓库获取的最新提交。
  2. git pull

    • 用途git pullgit fetchgit merge 的组合。它不仅下载最新的远程更改,还会尝试将这些更改合并到当前分支中。
    • 结果:如果合并成功(没有冲突),您的当前分支将自动更新以包括远程分支的更改。
    • 修订历史:如果合并成功,您的本地分支修订历史将包括这些远程更改。
具体使用示例

(1)使用 git fetch 检查远程更改

假设您正在本地的 master 分支上工作,并想查看远程仓库(如 origin)中的更新,但不立即合并这些更改:

git fetch origin

执行此命令后,您可以使用以下命令检查远程分支的状态而不影响您的本地分支:

git log --oneline master..origin/master

这会显示从远程 master 分支获取的提交,这些提交还没有被合并到您的本地 master 分支。

(2) 合并 FETCH_HEAD

如果您决定要将这些更改合并到您的本地分支,可以使用:

git merge FETCH_HEAD

这会将从 git fetch 获取的更改合并到您当前的分支中。

(3)使用 git pull 直接更新和合并

如果您确定要立即获取并合并远程分支的更改,可以直接使用:

git pull origin master

这条命令等同于先执行 git fetch origin master 然后执行 git merge origin/master

3.4 推送(git push)

在将本地分支推送到远程存储库之前,所有提交都可用。换句话说,您可以按照自己的节奏在本地分支工作,而不会影响其他团队成员。

当您将本地分支推送到远程时,Git 将快进合并到目标存储库。

但是,如果推送导致非快进合并,Git 将拒绝您的推送以防止您覆盖以前的提交。在这种情况下,您必须拉取最新的远程更改并再次推送。

Diagram displaying git push command.

4 分支的工作流程

在成功的Git分支模型中,提到的五种分支类型,每种都具有特定的作用和管理规则。这些分支类型协助团队在不同的开发阶段进行组织和管理,确保软件开发流程的清晰性和效率。以下是对这些分支的概述和整理:

1. 主分支(Main Branch)

  • 别称: mastermain
  • 用途: 包含生产环境中的代码,始终保持稳定且可部署。
  • 特点: 通常用于合并其他分支的成果,如新功能、修补或发布准备。不直接在此分支上进行日常工作。

2. 功能分支(Feature Branches)

  • 别称: 主题分支
  • 用途: 用于开发新功能或实验,每个分支通常源自主分支或开发分支,并最终合并回去。
  • 特点: 提供了一个隔离的环境,允许开发者在不影响主分支稳定性的情况下工作,便于代码审查和管理。

3. 发布分支(Release Branches)

  • 用途: 用于准备即将发布的版本。从开发分支(如develop)分出,进行最后的测试和微调。
  • 特点: 主要处理bug修复、文档生成和其他发布任务。一旦版本准备就绪并确认可以发布,发布分支将合并到主分支和开发分支中,随后关闭。

4. 修补分支(Hotfix Branches)

  • 用途: 快速修复生产环境中的紧急问题。这些分支从主分支分出,并在问题解决后立即合并回主分支和开发分支。
  • 特点: 旨在迅速解决生产中的关键问题,确保对正在进行的开发活动的干扰最小。

5. 开发分支(Development Branch)

  • 别称: 集成分支,通常命名为develop
  • 用途: 包含所有为下一版本准备好的功能,是功能分支合并的目标。
  • 特点: 在发布周期的大部分时间内保持活跃,用于集成即将发布的功能。在发布前,通常会从中创建一个发布分支。

这些分支策略提供了清晰的结构框架,帮助团队高效管理复杂的开发流程,优化协作和交付速度。根据项目和组织的需求,团队可以对这些策略进行调整,以最适合自己的工作方式。

Basic Git branching workflow with main, feature, release, hotfix, and develop branches.

4.1 主分支

在存储库中进行第一次提交时,默认情况下 Git 会自动创建一个主分支。随后的提交将在主分支下进行,直到您决定创建并切换到另一个分支。

驻留在主分支的代码库是生产就绪的。当最新的提交准备好用于特定版本时,它将被赋予一个发布标签。

Changes are committed to the main branch.

4.2 功能发布

当您开始处理新功能或 bug 修复时,您应该创建一个功能分支 (即主题分支)。功能分支通常是在开发分支之外创建的。在功能的整个开发生命周期中,该主题分支可以驻留在您的本地机器中。

每当您准备好将变更集与开发分支合并时,您将把这个分支推送到远程存储库。

Image of a feature branch

4.3 发布分支

当您推出新版本时,您会创建一个发布分支。发布分支可帮助您确保新功能的正常运行。

按照惯例,在命名发布分支时以前缀release-开头。

通常当它接近生产就绪时,您会在开发分支之外创建发布分支。

团队成员应仅解决此分支上的 bug 修复和与发布相关的问题。这允许其他团队成员继续将新功能推送到开发分支,而不会中断发布的工作流程。

准备发布时,将发布分支与主分支合并,并为新创建的合并提交标记发布编号。

您还应该将发布分支与开发分支合并,以便主分支和开发分支都可从发布分支接收最新的更改/bug 修复。

4.4 修补分支

当您需要快速向生产代码库添加关键修复时,您可以在主分支之外创建一个修补分支。

按照惯例,在命名修补分支时以前缀hotfix-开头。

修补分支的优点是它允许您快速发布补丁,并将更改与主分支合并,而无需等待下一个版本。

修补分支也应该与开发分支合并。

4.5 开发分支

您的团队应该始终保持开发分支 (即集成分支) 的稳定。您的团队从这个分支创建新的分支,它可以在生产环境中运行。持续集成工具,例如 Jenkins 可以做到这一点。

当一些更改需要合并到开发分支时,创建一个功能/分支来处理通常是个好主意。

4.6 Git分支工作流程示例

在这个Git分支策略工作流程示例中,我们通过处理一个实际场景来阐明如何在开发新功能的同时快速响应并修复生产中的bug。这种分支策略有效地结合了开发/集成分支和功能/主题分支的使用,确保开发流程的连续性和灵活性。

分支策略工作流程步骤详解

1. 发现生产中的Bug
  • 在开发新功能的同时,生产环境中出现了一个bug。为了不干扰当前的功能开发,需要创建一个专门的bug修复分支。On the way of work on a topic branch to add functions, it becomes necessary to fix bugs.
2. 创建Bug修复分支
  • 从开发分支(通常是develop)分出一个新的分支来专门处理这个bug。这保证了bug修复工作与功能开发工作的隔离。You can start working independently from the addition of functions by creating a new topic branch for fixing bugs.
3. 修复Bug并合并
  • 在这个新的bug修复分支上进行工作,一旦完成修复,就将这个分支合并回开发分支。这一步确保所有的bug修复都会反映到主要的开发线上。

You can make it public by including it in the original branch

4. 返回到功能分支
  • 修复完bug后,切换回原先的功能分支继续新功能的开发。

You can go back to the original branch to continue working on the addition of functions

5. 同步开发分支的更改
  • 开发新功能时,您可能需要刚刚合并到开发分支上的修复。这需要您将开发分支的更改(包括bug修复)整合到您的功能分支上。
  • 您可以通过以下两种方式来实现:
    • 合并(Merge):将开发分支合并到您的功能分支,这将保留两个分支的历史。
    • 变基(Rebase):将您的功能分支变基到最新的开发分支上。这使得历史更为线性,好像您是在最新的开发状态基础上开始添加新功能。
6. 使用变基进行同步
  • 选择使用变基来更新您的功能分支,这样您的分支看起来就像是直接基于最新的开发分支开始的。这样可以使项目历史更清晰,也更易于理解。
7. 继续功能开发
  • 完成变基后,您的功能分支现在包含了必要的bug修复。您可以继续开发新功能,确保所依赖的代码是最新且稳定的。

5 整合分支

  • 合并方法:保留合并分支的所有更改和历史记录。多次合并后,修订历史记录可能会变得复杂。
  • 变基方法:维护一个干净的修订历史记录,因为合并的提交会附加在目标分支的末尾。与合并的方法相比,冲突可能更频繁地发生。

为了使您的修订历史记录保持简洁,您可以在将功能分支合并到开发分支之前,将功能分支变基。这会导致快进合并,而不会创建额外的合并提交。

5.1 合并分支

您可以使用 git merge 指令来将多个分支集成。

考虑下面的情况。有两个分支:一个bugfix分支,其中有一些来自main分支的提交。

Branch

在这种情况下,将“bugfix“合并回“主要“分支并不是什么大问题。那是因为自从创建“bugfix”分支以来,“主要“分支没有改变。Git 将通过将“主要“分支位置移动到“bugfix“分支的最新位置来合并它。这种合并称为“快进“。

Fast-forward merge

然而,在下面的示例中,自从bugfix分支出来后,main分支已经更新了几次。在这两个分支上执行合并时,必须组合来自bugfixmain分支的更改。

It has advanced more than when a branch is divided

对于这种合并,创建一个“合并提交“并将“主要“位置更新为新创建的合并提交。

Merge commit incorporating both changes

即使快进合并是可能的,您仍然可以明确地强制它在没有快进合并的情况下进行合并。

Non fast-forward merge

如上所示,非快进合并保留了bugfix分支。这让您更清楚地了解功能分支bugfix。您可以轻松找到功能分支的开始或结束位置,并跟踪对功能分支所做的更改。

5.2 将分支变基

要获得更清晰的修订历史记录,您可以使用 git rebase 命令来整合您的分支。

假设我们有两个具有非快进合并场景的分支。

Branch

变基将导致分支历史记录看起来类似于下面的示例。

Unify branches by using rebase

当您将bugfix分支变基到主分支时,来自bugfix分支的提交将被重播并附加到主分支的末尾。结果是bugfix分支历史记录中的单个简单提交串流。

如果在附加提交时发生冲突,Git 会要求您解决冲突,然后再继续对其他提交进行变基。

Unify branches by using rebase

变基不会移动main的位置。在任何情况下,您都可以在变基后进行快进或从bugfixmain的干净合并。

Unify branches by using rebase

6 标签

Git 标签标记并标记历史记录中的特定提交。标签通常用于指示发布版本,发布名称 (即 v1.0) 是标签的名称。

Git 标签有两种类型:

  • 轻量标签
  • 附注标签

轻量标签类似于不会改变的分支。它只是直接指向历史记录中的特定提交。轻量标签主要在您的本地工作区中暂时使用。

附注标签是校验和的,通常在计划标记重要提交时使用。您可以添加消息、签名、日期以及标记者的姓名和电子邮件。

Git tags in the main branch

7 查看变更

(1)git diff

用途git diff 命令用于显示工作目录中未暂存的文件修改和暂存的文件修改之间的差异,或比较两个提交之间的差异。

功能详解

  • 未暂存的变更git diff 默认显示工作目录中所有未暂存的变更。

    git diff
    
  • 暂存的变更:使用 git diff --stagedgit diff --cached 查看已暂存的变更。

    git diff --staged
    
  • 两个提交之间的差异:指定两个提交的哈希值来查看它们之间的差异。

    git diff commit1 commit2
    

(2)git show

用途git show 命令用于显示一个对象(通常是提交)的类型、大小、内容等信息。

功能详解

  • 查看特定提交:显示单个提交的详细信息,包括提交的差异和元数据。

    git show [commit-hash]
    

(3)git log

用途git log 命令用于查看提交历史记录,可以与不同的选项组合使用,以查看特定的历史变更。

功能详解

  • 查看特定文件的提交历史:显示指定文件的提交历史,包括相关的更改。

    git log -p [filename]
    
  • 图形化显示分支合并历史:使用图形选项查看更直观的分支历史。

    git log --graph --oneline --all
    

(4)git blame

用途git blame 命令用于显示每一行文件的最后修改者信息,非常有用于追踪特定行的变更历史。

功能详解

  • 查看文件修改者:逐行显示文件的修改记录,包括提交哈希和作者。

    git blame [filename]
    

其他

git statusgit log 是两个基本的 Git 命令,它们在日常 Git 使用中扮演着不同的角色。这两个命令提供的信息有着根本的区别,分别关注当前工作区的状态和项目的提交历史。

git status

用途git status 命令用于显示 Git 工作目录和暂存区的状态。它是诊断和解决代码中状态相关问题的首选工具。

主要功能

  • 显示哪些文件处于修改状态(已修改但未暂存)。
  • 显示哪些文件已暂存待提交(已修改并已暂存)。
  • 显示当前工作目录与指定分支(通常是当前分支)的差异。
  • 提示如何暂存或取消暂存更改,以及如何回滚对文件的修改。
  • 提供当前分支和其上游分支的同步状态(前提是设置了上游分支)。

输出示例

On branch main
Your branch is up to date with 'origin/main'.Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   example.txtChanges 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:   readme.mdUntracked files:(use "git add <file>..." to include in what will be committed)sample.txt

git log

用途git log 命令用于显示当前分支的提交历史。它可以帮助开发者回顾和审查项目的发展过程。

主要功能

  • 显示提交历史,包括提交的哈希值、作者、日期和提交消息。
  • 可以通过各种选项来定制显示的日志,如日期范围、作者、文件更改历史等。
  • 支持图形化显示历史,通过--graph选项展示分支合并历史。

输出示例

commit fa3e98197e714dbf123681f6927a05538db6aa56 (HEAD -> main, origin/main, origin/HEAD)
Author: John Doe <john@example.com>
Date:   Wed Sep 15 14:56:29 2021 +0200Add new featurecommit aea57694cd1bfeda98234aeccc8ae202b58db2b4
Author: Jane Smith <jane@example.com>
Date:   Tue Sep 14 12:48:53 2021 +0200Update README.md

总结

  • git status 用于查看工作目录和暂存区的当前状态,是了解当前工作进度和状态的最直接的工具。
  • git log 用于查看提交历史,帮助你了解项目的版本历史和过去的开发活动。

这两个命令在日常的 Git 使用中非常关键,为开发者提供了关于项目状态和历史的重要信息。

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

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

相关文章

Qt/QML学习-定位器

QML学习 定位器例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15Window {width: 640height: 480visible: truetitle: qsTr("positioner")Rectangle {id: rectColumnwidth: parent.width / 2height: parent.height / 2border.width: 1Col…

Qt基础控件总结—多页面切换(QStackWidget类、QTabBar类和QTabWidget类)

QStackedWidget 类 QStackedWidget 类是在 QStackedLayout 之上构造的一个便利的部件,其使用方法与步骤和 QStackedLayout 是一样的。QStackedWidget 类的成员函数与 QStackedLayout 类也基本上是一致的,使用该类就和使用 QStackedLayout 一样。 使用该类可以参考QStackedL…

iPhone数据恢复篇:在 iPhone 上恢复找回短信的 5 种方法

方法 1&#xff1a;检查最近删除的文件夹 iOS 允许您在 30 天内恢复已删除的短信。您需要先从“设置”菜单启用“过滤器”。让我们来实际检查一下。 步骤 1&#xff1a;打开“设置” > “信息”。 步骤 2&#xff1a;选择“未知和垃圾邮件”&#xff0c;然后切换到“过滤…

如何将若依vue升级到springboot3.x?

为了确保项目符合要求,Spring Boot 3.x 要求Java版本为17或更高。 1、修改根目录下的pom.xml文件 <!-- java.version版本8更换为17 --> <java.version>17</java.version><!-- 新增节点 --> <mybatis-spring-boot.version>3.0.3<

SpringMVC(3)——SpringMVC注解实战

前言 SpringMVC&#xff08;2&#xff09;——controller方法参数与html表单对应&#xff08;请求参数的绑定&#xff09; 上篇博客我们提到了controller方法的参数与html表单之间的对应关系 但是这种对应关系有很多缺点&#xff1a; 传递参数只能放在request的body当中&am…

极狐Gitlab使用(2)

目录 1. Gitlab命令行修改管理员密码 2. Gitlab服务管理 3. 公司的开发代码提交处理流程 4. Gitlab 备份与恢复 数据备份 测试数据恢复 5. 邮箱配置 1. Gitlab命令行修改管理员密码 [roottty01 ~]# gitlab-rails console -e production # 启动GitLab的Rails控制…

windows USB 设备驱动开发-USB电源管理(一)

符合通用串行总线 (USB) 规范的 USB 设备的电源管理功能具有一组丰富而复杂的电源管理功能。 请务必了解这些功能如何与 Windows 驱动程序模型 (WDM) 交互&#xff0c;特别是 Microsoft Windows 如何调整标准 USB 功能以支持系统唤醒体系结构。 基于内核模式驱动程序框架的 US…

2024年06月CCF-GESP编程能力等级认证Python编程四级真题解析

本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有几种?( ) A. 1 B. 2 C…

React文档内网搭建

React文档内网搭建流程 官网地址 官网中文地址 通过官网我们可以找到React的github存储库 ReactGitHub 在介绍中可以找到对应的文档存储库 React文档存储库 此存储库是英文文档地址,我们通过中文文档地址以及该存储库作者目录下找到中文存储库 React文档中文存储库 下载…

13个Python自动化实战脚本

1、批量文件重命名神器在工作中&#xff0c;我们常常需要对大量文件进行批量重命名&#xff0c;Python帮你轻松搞定&#xff01; 2、自动发送邮件通知告别手动发送&#xff0c;用Python编写定时发送邮件的自动化脚本。 3、定时任务自动化执行使用Python调度库&#xff0c;实现定…

高盛开源的量化金融 Python 库

GS Quant GS Quant是用于量化金融的Python工具包&#xff0c;建立在世界上最强大的风险转移平台之一之上。旨在加速量化交易策略和风险管理解决方案的开发&#xff0c;凭借25年的全球市场经验精心打造。 它由高盛的定量开发人员&#xff08;定量&#xff09;创建和维护&#…

云开发技术的壁纸小程序源码,无需服务期无需域名

1、本款小程序为云开发版本&#xff0c;不需要服务器域名 2、文件内有图文搭建教程&#xff0c;小白也不用担心不会搭建。 3、本程序反应速度极快&#xff0c;拥有用户投稿、积分系统帮助各位老板更多盈利。 4、独家动态壁纸在线下载&#xff0c;给用户更多的选择 5、最新版套图…

Open3D 点云配准精度评价指标-RMSE

目录 一、概述 1.1RMSE的计算方法 1.2RMSE的评价标准 二、代码实现 三、实现效果 3.1原始点云 3.2计算数据 一、概述 均方根误差(RMSE, Root Mean Squared Error)是衡量两个点云之间平均误差的一个常用指标。它通过计算匹配点对之间距离的平方和的平方根,来…

有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?

软件测试是确保软件质量的重要环节&#xff0c;而在进行软件测试时&#xff0c;是否有必要找第三方软件测评公司呢?第三方软件测评公司是指独立于软件开发公司和用户之间的中立机构&#xff0c;专门从事软件测试和测评工作。与自身开发团队或内部测试团队相比&#xff0c;选择…

计算机的错误计算(二十七)

摘要 介绍错数&#xff1a;任给一个单变元函数&#xff0c;当自变量被截断时&#xff0c;函数值中含有的错误的有效数字个数&#xff0c;并给出其计算方法。 首先&#xff0c;从字面上看&#xff0c;错数表示错误的有效数字个数。 下面从一个略显粗糙的化简过程&#xff0c;推…

网络安全防御【防火墙安全策略用户认证综合实验】

目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务&#xff08;带内管理的工作模式&#xff09; 2、在FW1的web网页中网络相关配置 3、交换机LSW6&#xff08;总公司&#xff09;的相关配置&#xff1a; 4、路由器相关接口配置&a…

java入门-告别C进入java世界

目标 java体系 java开发环境 helloworld java语法 java体系 java开发环境 安装JDK JDK&#xff1a; Java Developement Kit 配置jdk 为什么需要配置 操作系统找不到此程序 操作系统PATH PATH C:\Users\49354>echo %PATH% C:\Program Files (x86)\VMware\VMware Works…

windows信息收集和提权

目录 手动收集 工具收集 windows本地内核提权 本地提权 根据windows去找需要的exp进行利用 提权后结合mimikatz使用 msf提权 简单提权 生成后门 上线 BypassUAC绕过UAC提权 msf带的bypassuac模块可以尝试提权 Bypassuac提权命令操作 提权成功 ​local_exploi…

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841)

pip安装python库时报错问题解决 报错&#xff1a;[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:841) 解决&#xff1a; pip --trusted-host pypi.python.org install -r packagename&#xff08;包名&#xff09;

特斯拉的人形机器人最新展示,穿戴遥操作示教的机器人学习!

在机器人领域&#xff0c;特斯拉的人形机器人一直备受关注。2021 年&#xff0c;在「特斯拉 AI 日」上&#xff0c;马斯克发布了特斯拉的通用机器人计划&#xff0c;并用图片展示了人形机器人 Tesla Bot 的大致形态。但当时的 Tesla Bot 只是个概念&#xff0c;动作展示部分是由…