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

【Git】Git 完全指南:从入门到精通

LuckiBit
在这里插入图片描述

Git 完全指南:从入门到精通

Git 是现代软件开发中最重要的版本控制工具之一,它帮助开发者高效地管理项目,支持分布式协作和版本控制。无论是个人项目还是团队开发,Git 都能提供强大的功能来跟踪、管理代码变更,并保障项目的稳定性与可持续发展。本篇文章从基础命令讲起,逐步深入,帮助你全面了解并掌握 Git,最终达到精通。

目录

  • Git 完全指南:从入门到精通
    • 1. Git 概述
      • 1.1 什么是 Git
      • 1.2 Git 与其他版本控制系统的区别
      • 1.3 Git 的主要特点
    • 2. Git 安装与配置
      • 2.1 Git 安装
        • Windows
        • macOS
        • Linux
      • 2.2 Git 配置
    • 3. Git 基础命令
      • 3.1 克隆 Git 仓库
      • 3.2 查看 Git 仓库状态
      • 3.3 查看提交历史
      • 3.4 创建、切换和删除分支
        • 创建分支
        • 切换分支
        • 删除分支
      • 3.5 合并分支
    • 4. Git 提交与变更管理
      • 4.1 提交文件变更
      • 4.2 查看差异
      • 4.3 使用暂存区
        • 暂存所有更改
        • 暂存单个文件
    • 5. Git 分支管理
      • 5.1 分支的概念
      • 5.2 创建、切换和删除分支
        • 创建分支
        • 切换分支
        • 删除分支
      • 5.3 合并分支与解决冲突
        • 合并分支
        • 解决冲突
    • 6. Git 工作流
      • 6.1 基本工作流
      • 6.2 Git Flow 工作流
      • 6.3 Fork 与 Pull Request 工作流
    • 7. Git 高级命令与技巧
      • 7.1 Rebase 与 Merge
      • 7.2 使用 Tag
      • 7.3 Git 忽略文件
        • 7.3.1 创建 `.gitignore` 文件
        • 7.3.2 编辑 `.gitignore` 文件
        • 7.3.3 忽略已跟踪的文件
        • 7.3.4 适用的忽略规则
        • 7.3.5 常见的 `.gitignore` 配置
          • 1. Node.js 项目 `.gitignore`
          • 2. Python 项目 `.gitignore`
          • 3. Java 项目 `.gitignore`
        • 7.3.6 提交 `.gitignore` 文件
      • 7.4 查看提交历史
      • 7.5 撤销修改
        • 7.5.1 撤销未暂存的更改
        • 7.5.2 撤销暂存的更改
        • 7.5.3 撤销整个提交
    • 8. Git 与远程仓库
      • 8.1 查看远程仓库
      • 8.2 拉取远程仓库的更新
      • 8.3 推送本地更改到远程仓库
      • 8.4 克隆远程仓库
    • 9. Git 高级特性
      • 9.1 子模块 (Submodule)
        • 添加子模块
        • 更新子模块
      • 9.2 使用 Git 钩子 (Hooks)
        • 设置钩子
        • 示例钩子:`pre-commit`
      • 9.3 Git 配置与别名
        • 设置别名
        • 查看配置
    • 10. Git 性能优化与高级技巧
      • 10.1 使用 Git LFS (Large File Storage)
        • 安装 Git LFS
        • 跟踪大型文件类型
        • 提交 LFS 文件
      • 10.2 Git 分支管理高级技巧
        • 删除本地分支
        • 删除远程分支
      • 10.3 Git 合并与冲突解决
        • 合并分支
        • 解决冲突
    • 11. Git 工作流程
      • 11.1 基本工作流程
      • 11.2 Git Flow 工作流程
        • 安装 Git Flow
        • 创建新特性分支
        • 完成特性分支
        • 发布分支
    • 12. Git 进阶技巧
      • 12.1 使用 Stash 临时保存更改
        • 保存当前更改
        • 查看 Stash 列表
        • 恢复 Stash
        • 删除 Stash
      • 12.2 使用 rebase 重新应用提交
        • 执行 Rebase
      • 12.3 使用 Bisect 查找提交中的 bug
        • 启动 Bisect
        • 标记提交为好或坏
    • 13. 寄语
    • 14. 结束语

1. Git 概述

1.1 什么是 Git

Git 是一个分布式版本控制系统,用于跟踪文件的变化,尤其是程序代码的变化。它由 Linus Torvalds(Linux 操作系统的创建者)于 2005 年开发。Git 允许开发者在本地创建代码仓库,进行文件修改、提交等操作,直到准备好与远程仓库同步。Git 提供强大的分支管理功能,可以在不干扰主分支的情况下开发新功能或修复 bug。

1.2 Git 与其他版本控制系统的区别

  • 集中式版本控制系统(如 SVN):所有的代码版本保存在一个中央服务器中。每次操作都需要连接到服务器。
  • 分布式版本控制系统(如 Git):每个开发者的工作站都有完整的代码历史记录,可以脱离服务器工作,直到需要同步时才连接。

1.3 Git 的主要特点

  • 速度快:Git 的本地操作速度非常快,因为大多数操作是在本地完成的。
  • 分布式架构:每个开发者的机器上都有完整的代码库副本,不依赖于中央服务器。
  • 支持分支和合并:Git 提供强大的分支管理和合并功能,便于团队协作。
  • 数据完整性:Git 使用 SHA-1 哈希值确保版本数据的完整性,防止数据丢失。

2. Git 安装与配置

2.1 Git 安装

Git 支持多种操作系统,包括 Windows、macOS 和 Linux。以下是不同操作系统的安装方法:

Windows
  1. 前往 Git 官方网站 下载 Windows 版 Git。
  2. 运行安装程序,按照向导完成安装,选择默认选项即可。
  3. 安装完成后,在命令行输入 git --version,如果显示 Git 的版本号,表示安装成功。
macOS
  1. 可以使用 Homebrew 安装 Git,打开终端并输入:
    brew install git
    
  2. 安装完成后,在命令行输入 git --version,如果显示 Git 的版本号,表示安装成功。
Linux
  1. 在 Debian/Ubuntu 系统上,可以使用以下命令安装:
    sudo apt update
    sudo apt install git
    
  2. 在 Red Hat/Fedora 系统上:
    sudo yum install git
    

2.2 Git 配置

Git 安装完成后,第一次使用时需要进行一些基本配置,主要包括设置用户名和邮箱。

命令

git config --global user.name "<username>"
git config --global user.email "<email>"

示例命令

git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"

效果

  • 这些配置将用于你所有的 Git 提交,确保每次提交时正确记录提交者信息。
  • 配置成功后,使用 git config --list 可以查看所有配置信息。

3. Git 基础命令

3.1 克隆 Git 仓库

命令

git clone <repository_url>

示例命令

git clone https://github.com/example/repo.git

效果

  • 克隆远程仓库到本地。此命令会创建一个与远程仓库同名的文件夹,并将所有文件和历史记录下载到本地。
  • 终端输出
    Cloning into 'repo'...
    remote: Counting objects: 50, done.
    remote: Compressing objects: 100% (25/25), done.
    remote: Total 50 (delta 15), reused 20 (delta 5), pack-reused 0
    Unpacking objects: 100% (50/50), done.
    

3.2 查看 Git 仓库状态

命令

git status

示例命令

git status

效果

  • 显示当前工作目录的状态,列出哪些文件有变更,哪些文件已经暂存,哪些文件没有被跟踪。
  • 终端输出
    On branch master
    Your branch is up to date with 'origin/master'.Changes not staged for commit:modified:   index.htmlno changes added to commit (use "git add" and/or "git commit -a")
    

3.3 查看提交历史

命令

git log

示例命令

git log

效果

  • 查看当前 Git 仓库的提交历史。Git 会显示每次提交的哈希值、作者信息、提交日期和提交信息。
  • 终端输出
    commit 1234567890abcdef1234567890abcdef12345678
    Author: John Doe <johndoe@example.com>
    Date:   Tue Oct 28 18:32:01 2024 +0800Fixed the bug in index.htmlcommit 0987654321abcdef0987654321abcdef09876543
    Author: Jane Smith <janesmith@example.com>
    Date:   Mon Oct 27 12:15:45 2024 +0800Added new feature to main.js
    

3.4 创建、切换和删除分支

创建分支

命令

git branch <branch_name>

示例命令

git branch feature-xyz

效果

  • 创建一个新的分支 feature-xyz,但并不切换到该分支。
切换分支

命令

git checkout <branch_name>

示例命令

git checkout feature-xyz

效果

  • 切换到指定的分支 feature-xyz
删除分支

命令

git branch -d <branch_name>

示例命令

git branch -d feature-xyz

效果

  • 删除分支 feature-xyz,如果分支已经合并到当前分支,则可以成功删除。如果没有合并,Git 会提示你需要使用 -D 强制删除。

3.5 合并分支

命令

git merge <branch_name>

示例命令

git merge feature-xyz

效果

  • feature-xyz 分支的更改合并到当前分支。如果没有冲突,Git 会自动合并并创建一个新的提交。
  • 终端输出
    Updating abcdef1..1234567
    Fast-forwardfile1 | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
    

如果合并过程中出现冲突,Git 会标记出冲突文件,需要手动解决冲突后再提交。

4. Git 提交与变更管理

4.1 提交文件变更

命令

git commit -m "<commit_message>"

示例命令

git commit -m "Fix bug in header component"

效果

  • 将已暂存的更改提交到本地 Git 仓库,并附带一条提交信息。
  • 终端输出
    [master 1234567] Fix bug in header component1 file changed, 2 insertions(+), 1 deletion(-)
    

4.2 查看差异

命令

git diff

示例命令

git diff

效果

  • 显示工作目录与暂存区之间的差异,或者暂存区与最后一次提交之间的差异。它是用来查看文件改动的详细内容。
  • 终端输出
    diff --git a/index.html b/index.html
    index abcdef1..1234567 100644
    --- a/index.html
    +++ b/index.html
    @@ -1,3 +1,3 @@<header>
    -   <h1>Welcome to My Website</h1>
    +   <h1>Welcome to Our Website</h1></header>
    

4.3 使用暂存区

Git 使用暂存区来暂存更改,等待提交。你可以使用 git add 将修改的文件添加到暂存区,然后使用 git commit 提交更改。

暂存所有更改

命令

git add .

示例命令

git add .

效果

  • 暂存当前目录下的所有更改(包括新增、修改和删除的文件)。然后,使用 git commit 提交这些更改。
暂存单个文件

命令

git add <file_name>

示例命令

git add index.html

效果

  • index.html 文件的更改添加到暂存区,准备提交。

5. Git 分支管理

5.1 分支的概念

分支是 Git 中一个非常强大的功能,它允许你在不影响主分支(通常是 mastermain)的情况下进行开发。每个分支都是代码的一个独立版本,开发者可以在不同分支上并行开发,最后再将它们合并。

  • 主分支:通常是主开发线的分支,生产环境代码通常部署在主分支上。
  • 功能分支:通常用于开发新功能。每个功能分支在完成开发后合并回主分支。
  • 发布分支:用于准备代码发布,确保代码在生产环境中运行良好。

5.2 创建、切换和删除分支

创建分支

命令

git branch <branch_name>

示例命令

git branch feature-login

效果

  • 创建一个名为 feature-login 的新分支,但不切换到该分支。
切换分支

命令

git checkout <branch_name>

示例命令

git checkout feature-login

效果

  • 切换到 feature-login 分支,开始在该分支上进行开发。
删除分支

命令

git branch -d <branch_name>

示例命令

git branch -d feature-login

效果

  • 删除 feature-login 分支。如果该分支已经合并到当前分支,删除将成功。如果尚未合并,Git 会发出警告。

5.3 合并分支与解决冲突

当开发者在不同分支上进行开发并且最终需要将这些更改合并时,Git 提供了合并操作。合并时,如果两个分支修改了相同的部分,Git 会提示冲突,并要求开发者手动解决。

合并分支

命令

git merge <branch_name>

示例命令

git merge feature-login

效果

  • feature-login 分支的更改合并到当前分支。如果没有冲突,Git 会自动完成合并,并创建一个新的提交。
解决冲突

如果合并时发生冲突,Git 会标记出冲突文件,开发者需要手动编辑冲突部分,解决后再执行提交。

  1. 查看冲突文件:

    git status
    
  2. 编辑冲突文件,删除冲突标记,修改内容。

  3. 暂存解决冲突的文件:

    git add <conflicted_file>
    
  4. 完成合并并提交:

    git commit
    

6. Git 工作流

6.1 基本工作流

Git 的基本工作流包括以下步骤:

  1. 从远程仓库克隆项目。
  2. 在本地创建新的分支进行开发。
  3. 完成开发后,提交更改并推送到远程仓库。
  4. 合并到主分支并推送到远程仓库。

6.2 Git Flow 工作流

Git Flow 是一种非常流行的 Git 工作流,适用于持续集成和团队合作的项目。Git Flow 使用几个固定的分支来管理开发周期:

  • master:用于发布的分支,生产环境代码总是保持稳定。
  • develop:用于开发的主分支,所有的开发和集成工作都发生在这里。
  • feature:每个新功能都应该在独立的分支上开发。
  • release:当开发周期结束时,创建一个发布分支进行最终调试。
  • hotfix:用于修复生产环境的紧急问题。

6.3 Fork 与 Pull Request 工作流

在开源项目中,通常使用 Fork 和 Pull Request(PR)工作流。开发者可以 fork 一个远程仓库,修改自己的分支,最后通过 Pull Request 将修改提交给原仓库的所有者进行合并。

  1. Fork:在 GitHub 上 fork 仓库,创建该仓库的副本。
  2. Clone:将 fork 的仓库克隆到本地。
  3. 修改与提交:在本地修改代码并提交。
  4. Pull Request:在 GitHub 上发起 Pull Request,将修改提交给原项目。

7. Git 高级命令与技巧

7.1 Rebase 与 Merge

git mergegit rebase 都用于合并分支,但它们的工作方式不同。

  • Merge:合并分支时,会产生一个合并提交,保留合并历史。
  • Rebase:将一个分支的修改应用到另一个分支的最顶端,从而产生一个线性的提交历史。

命令

git rebase <branch_name>

示例命令

git rebase master

效果

  • 将当前分支的更改应用到 master 分支的顶部,从而产生一个线性的提交历史。

7.2 使用 Tag

Git 使用标签(Tag)来标记特定的提交点,通常用于标记发布版本。

命令

git tag <tag_name>

示例命令

git tag v1.0

效果

  • 为当前提交创建一个名为 v1.0 的标签。

7.3 Git 忽略文件

在 Git 中,.gitignore 文件用于指定 Git 不需要跟踪的文件或目录。它通常用于忽略临时文件、编译产物、操作系统生成的文件等不需要版本控制的内容。合理使用 .gitignore 能有效保持 Git 仓库的整洁,避免不必要的文件进入版本控制系统。

7.3.1 创建 .gitignore 文件

命令

echo "<pattern>" >> .gitignore

示例命令

echo "node_modules/" >> .gitignore

效果

  • 这个命令将 node_modules/ 目录添加到 .gitignore 文件中,表示 Git 将忽略所有 node_modules 目录下的文件。
  • 如果 .gitignore 文件不存在,它会自动创建并将指定的内容追加到文件末尾。
  • 运行命令后,执行 cat .gitignore 可以看到文件内容:
    $ cat .gitignore
    node_modules/
    

注意事项

  • .gitignore 是一个文本文件,你可以手动编辑该文件来添加其他需要忽略的文件或目录模式。
  • 使用 >> 操作符会将内容追加到 .gitignore 文件,如果该文件已经存在,内容将不会被覆盖。
7.3.2 编辑 .gitignore 文件

在项目开发中,可能会有多个文件需要被忽略,或者更改忽略规则。你可以手动编辑 .gitignore 文件,添加新的忽略规则。

命令

nano .gitignore

示例命令

nano .gitignore

效果

  • 这会打开 .gitignore 文件,允许你进行手动编辑。你可以在文件中添加或删除需要忽略的文件或目录模式。
  • 例如,添加以下内容以忽略某些常见文件和文件夹:
    *.log
    *.tmp
    node_modules/
    dist/
    
    这样,所有 .log.tmp 文件以及 node_modules/dist/ 目录下的文件都会被 Git 忽略。

提示

  • 使用 nano 命令时,编辑完文件后需要按 Ctrl + O 保存文件,按 Ctrl + X 退出编辑器。
7.3.3 忽略已跟踪的文件

如果某个文件已经被 Git 跟踪,但之后你希望忽略它,可以通过修改 .gitignore 文件来实现。需要先将该文件从 Git 的索引中移除,然后才能正确忽略。

命令

git rm --cached <file_name>

示例命令

git rm --cached node_modules/

效果

  • 这个命令将 node_modules/ 目录从 Git 的索引中移除,但不会删除本地文件。
  • 在移除索引后,node_modules/ 目录将被 .gitignore 忽略,不再被 Git 跟踪。
  • 执行 git status 会看到该文件或目录从暂存区移除的提示:
    $ git status
    Changes to be committed:(use "git restore --staged <file>..." to unstage)deleted:    node_modules/
    

注意事项

  • 使用 --cached 参数仅会从 Git 的索引中删除文件,文件本身会保留在本地工作区。
  • 在移除文件后,记得提交 .gitignore 文件和 git rm 操作:
    git commit -m "Remove node_modules from version control"
    
7.3.4 适用的忽略规则

.gitignore 文件中,可以使用不同的模式来指定忽略哪些文件或目录。以下是常见的忽略规则:

  • 通配符 *:匹配零个或多个字符。例如,*.log 会忽略所有 .log 文件。
  • 目录模式 /*:匹配目录中的所有文件。例如,build/* 会忽略 build/ 目录下的所有文件。
  • 否定符 !:在忽略规则中,使用 ! 来指定不忽略某个文件或目录。例如,!important.log 会保留 important.log 文件。
  • 注释 #:注释行以 # 开头,Git 会忽略注释行。例如,# Ignore logs

命令

echo "*.log" >> .gitignore
echo "!important.log" >> .gitignore

效果

  • *.log 忽略所有 .log 文件。
  • !important.log 保留 important.log 文件,即使它符合 .log 模式。

注意事项

  • .gitignore 中添加规则时,一定要注意规则的顺序,因为后面的规则会覆盖前面的规则。例如,如果先添加 *.log 忽略所有 .log 文件,再添加 !important.log 来保留 important.log
7.3.5 常见的 .gitignore 配置

以下是一些常见的 .gitignore 配置,适用于不同的开发环境和工具。

1. Node.js 项目 .gitignore
# 忽略 node_modules 目录
node_modules/# 忽略编译的日志文件
npm-debug.log*# 忽略临时文件
*.tmp
*.swp
2. Python 项目 .gitignore
# 忽略虚拟环境目录
venv/
# 忽略 Python 编译的文件
*.pyc
*.pyo
3. Java 项目 .gitignore
# 忽略 Maven 构建输出目录
target/
# 忽略 IntelliJ IDEA 配置文件
.idea/
# 忽略 Eclipse 配置文件
.project
.classpath
7.3.6 提交 .gitignore 文件

一旦你修改了 .gitignore 文件并确保它包含了所有需要忽略的文件和目录,记得将它提交到 Git 仓库,以便其他开发者也能够使用相同的忽略规则。

命令

git add .gitignore
git commit -m "Add .gitignore to ignore unnecessary files"
git push origin <branch_name>

示例命令

git add .gitignore
git commit -m "Add .gitignore to ignore node_modules"
git push origin main

效果

  • .gitignore 文件添加到暂存区,提交到版本控制中,并推送到远程仓库。
  • 其他开发者拉取代码时,.gitignore 文件将自动应用到他们的本地仓库,确保不再跟踪忽略的文件。

7.4 查看提交历史

命令

git log

示例命令

git log

效果

  • 显示当前分支的提交历史,包括每个提交的哈希值、提交作者、提交时间和提交信息。输出格式如下:

    commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> master)
    Author: John Doe <johndoe@example.com>
    Date:   Thu Oct 28 12:15:42 2024 +0000Fix bug in header componentcommit abcdef1234567890abcdef1234567890abcdef12
    Author: Jane Smith <janesmith@example.com>
    Date:   Wed Oct 27 15:22:08 2024 +0000Add new feature to handle user login
    
  • 额外选项

    • git log --oneline:简洁模式,只显示提交的哈希值和提交信息。
    • git log --graph:以图形化方式显示提交历史。

7.5 撤销修改

Git 提供了多种方式撤销更改,视不同的场景而定。

7.5.1 撤销未暂存的更改

命令

git checkout -- <file_name>

示例命令

git checkout -- index.html

效果

  • 撤销文件 index.html 中的未暂存更改,恢复到上次提交时的状态。
7.5.2 撤销暂存的更改

命令

git reset <file_name>

示例命令

git reset index.html

效果

  • 将已暂存的 index.html 文件从暂存区移除,但不影响文件内容。如果你已经执行了 git add,此命令将取消暂存,但不会丢失文件中的更改。
7.5.3 撤销整个提交

命令

git reset --hard <commit_hash>

示例命令

git reset --hard abcdef1234567890abcdef1234567890abcdef12

效果

  • 重置当前分支到指定的提交 abcdef1234567890abcdef1234567890abcdef12,并且丢弃所有当前工作目录中的更改。请谨慎使用,因为此命令会删除所有未提交的更改。

8. Git 与远程仓库

8.1 查看远程仓库

命令

git remote -v

示例命令

git remote -v

效果

  • 显示当前项目的远程仓库信息,包括远程仓库的名称(通常为 origin)和 URL 地址。输出示例如下:
    origin  https://github.com/example/repo.git (fetch)
    origin  https://github.com/example/repo.git (push)
    

8.2 拉取远程仓库的更新

命令

git pull

示例命令

git pull origin master

效果

  • 从远程仓库的 master 分支拉取最新的更改并自动合并到本地当前分支。如果没有冲突,Git 会自动合并。
  • 终端输出
    remote: Enumerating objects: 20, done.
    remote: Counting objects: 100% (20/20), done.
    remote: Compressing objects: 100% (14/14), done.
    From https://github.com/example/repo* branch            master     -> FETCH_HEADUpdating abcdef1..1234567Fast-forwardfile1 | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
    

8.3 推送本地更改到远程仓库

命令

git push <remote_name> <branch_name>

示例命令

git push origin master

效果

  • 将本地 master 分支的提交推送到远程仓库。确保本地分支与远程分支一致后,执行推送操作。

  • 终端输出

    Counting objects: 3, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 329 bytes | 329.00 KiB/s, done.
    To https://github.com/example/repo.git1234567..89abcdef  master -> master
    

8.4 克隆远程仓库

命令

git clone <repository_url>

示例命令

git clone https://github.com/example/repo.git

效果

  • 克隆远程仓库到本地,创建一个新的 Git 仓库,并自动设置远程 origin 指向该仓库。
  • 终端输出
    Cloning into 'repo'...
    remote: Enumerating objects: 123, done.
    remote: Counting objects: 100% (123/123), done.
    remote: Compressing objects: 100% (90/90), done.
    remote: Total 123 (delta 10), reused 90 (delta 6), pack-reused 0
    Receiving objects: 100% (123/123), 3.64 MiB | 2.50 MiB/s, done.
    Resolving deltas: 100% (10/10), done.
    

9. Git 高级特性

9.1 子模块 (Submodule)

Git 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。它特别适合将第三方库或依赖项目引入到你的项目中。

添加子模块

命令

git submodule add <repository_url> <path>

示例命令

git submodule add https://github.com/example/other-repo.git submodules/other-repo

效果

  • 将一个外部仓库添加为子模块,并将其内容放置在指定路径(如 submodules/other-repo)下。
更新子模块

命令

git submodule update --remote

示例命令

git submodule update --remote

效果

  • 更新所有子模块到最新的远程版本。

9.2 使用 Git 钩子 (Hooks)

Git 钩子是 Git 中的一个机制,允许在执行某些操作前或后运行自定义脚本。常见的钩子包括 pre-commitpost-commit

设置钩子

命令

cd .git/hooks

示例命令

cd .git/hooks

效果

  • 进入 .git/hooks 目录,所有的钩子脚本都存放在该目录中。
示例钩子:pre-commit

命令

echo "#!/bin/sh" > .git/hooks/pre-commit
echo "echo 'Running pre-commit hook...'" >> .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

效果

  • 创建一个 pre-commit 钩子,每次提交之前,都会运行这个脚本。
  • 脚本内容会输出 "Running pre-commit hook...",并且该钩子需要执行权限。

9.3 Git 配置与别名

Git 允许你为常用命令设置别名,帮助提高工作效率。

设置别名

命令

git config --global alias.<alias_name> <git_command>

示例命令

git config --global alias.co checkout

效果

  • git checkout 命令设置别名 git co,以后可以使用 git co 来代替 git checkout
查看配置

命令

git config --list

示例命令

git config --list

效果

  • 显示所有 Git 配置项,例如用户信息、别名设置等。

10. Git 性能优化与高级技巧

10.1 使用 Git LFS (Large File Storage)

Git LFS 用于管理大型文件(如二进制文件、视频文件等),它将这些大文件存储在 Git 外部的专用服务中,从而避免仓库变得过于庞大。

安装 Git LFS

命令

git lfs install

示例命令

git lfs install

效果

  • 安装 Git LFS(Large File Storage),使其可以用于管理大型文件。
  • 终端输出
    Git LFS initialized.
    
跟踪大型文件类型

命令

git lfs track "*.psd"

示例命令

git lfs track "*.psd"

效果

  • 开始跟踪所有 .psd 文件类型的文件,将它们存储在 Git LFS 中。
  • 输出示例:
    Tracking "*.psd" to Git LFS.
    
提交 LFS 文件

命令

git add <file_name>
git commit -m "Add large file"

示例命令

git add image.psd
git commit -m "Add large PSD file"

效果

  • 将大文件(如 image.psd)添加到 Git LFS 管理的文件中,然后提交。

10.2 Git 分支管理高级技巧

删除本地分支

命令

git branch -d <branch_name>

示例命令

git branch -d feature-xyz

效果

  • 删除本地分支 feature-xyz,如果该分支未完全合并到当前分支,Git 会阻止删除。使用 -D 强制删除:
    git branch -D feature-xyz
    
删除远程分支

命令

git push <remote_name> --delete <branch_name>

示例命令

git push origin --delete feature-xyz

效果

  • 删除远程仓库中的 feature-xyz 分支。

10.3 Git 合并与冲突解决

合并分支

命令

git merge <branch_name>

示例命令

git merge feature-xyz

效果

  • feature-xyz 分支的修改合并到当前分支。如果没有冲突,Git 会自动合并修改并创建一次新的提交。
解决冲突

命令

git status

示例命令

git status

效果

  • 查看当前分支的状态,Git 会提示哪些文件存在冲突。通常会显示为 both modified,需要手动编辑冲突文件。

解决冲突步骤

  1. 打开冲突文件,手动解决冲突。Git 会在冲突部分标记出不同的修改,类似如下:

    <<<<<<< HEAD
    // Your changes here
    =======
    // Changes from the other branch
    >>>>>>> feature-xyz
    
  2. 在解决冲突后,标记为已解决:

    git add <file_name>
    
  3. 完成合并并提交:

    git commit
    

11. Git 工作流程

11.1 基本工作流程

命令

git clone <repository_url>
git checkout -b <new_branch>
git add <file_name>
git commit -m "Your commit message"
git push origin <new_branch>

示例命令

git clone https://github.com/example/repo.git
git checkout -b feature-xyz
git add index.html
git commit -m "Add new feature to index"
git push origin feature-xyz

效果

  • 这是一个基本的 Git 工作流程,包括从远程仓库克隆、创建新分支、修改文件、提交更改、推送到远程仓库等步骤。

11.2 Git Flow 工作流程

Git Flow 是一种常见的 Git 工作流程,它定义了多个分支类型和对应的管理策略,旨在简化团队协作。

安装 Git Flow

命令

git flow init

示例命令

git flow init

效果

  • 启动 Git Flow 工作流程初始化,设置默认的分支策略。
  • 会提示输入分支名称等设置,通常选择默认设置即可。
创建新特性分支

命令

git flow feature start <feature_name>

示例命令

git flow feature start feature-xyz

效果

  • 使用 Git Flow 创建一个新的特性分支 feature-xyz,用于开发新功能。
完成特性分支

命令

git flow feature finish <feature_name>

示例命令

git flow feature finish feature-xyz

效果

  • 完成 feature-xyz 分支的开发,并将其合并回 develop 分支。
发布分支

命令

git flow release start <release_name>

示例命令

git flow release start 1.0.0

效果

  • 创建一个新的发布分支 1.0.0,用于准备发布版本。

12. Git 进阶技巧

12.1 使用 Stash 临时保存更改

Git 提供了 stash 命令,用于将当前的更改暂时保存,之后可以恢复,以便切换到其他任务。

保存当前更改

命令

git stash

示例命令

git stash

效果

  • 保存当前工作区的修改,并将工作区恢复为最近一次提交时的状态。
查看 Stash 列表

命令

git stash list

示例命令

git stash list

效果

  • 显示所有的暂存更改(stash)列表。输出示例:
    stash@{0}: WIP on master: 1234567 Add feature X
    stash@{1}: WIP on feature-xyz: abcdef0 Fix bug Y
    
恢复 Stash

命令

git stash apply <stash_index>

示例命令

git stash apply stash@{0}

效果

  • 恢复指定的暂存更改,将其应用到当前分支。
删除 Stash

命令

git stash drop <stash_index>

示例命令

git stash drop stash@{0}

效果

  • 删除指定的暂存更改。

12.2 使用 rebase 重新应用提交

rebase 用于将一组提交应用到另一个分支上,常用于整理提交历史。

执行 Rebase

命令

git rebase <base_branch>

示例命令

git rebase master

效果

  • 将当前分支的提交重新应用到 master 分支的最新提交上。

12.3 使用 Bisect 查找提交中的 bug

Git Bisect 是一个二分查找工具,用于定位某个 bug 引入的提交。

启动 Bisect

命令

git bisect start

示例命令

git bisect start

效果

  • 启动 bisect 过程,Git 会要求你指定已知的“坏”提交和“好”提交。
标记提交为好或坏

命令

git bisect good <commit_hash>
git bisect bad <commit_hash>

示例命令

git bisect good abcdef1234567890
git bisect bad 1234567890abcdef

效果

  • 标记提交为好(不包含 bug)或坏(包含 bug)。Git 会通过二分查找来缩小范围,直到定位到引入 bug 的提交。

13. 寄语

Git 是一种强大的版本控制工具,掌握了其基本命令和高级特性后,可以大大提高开发效率并方便团队协作。通过本篇文章,你已经学会了 Git 的核心命令及其使用方法,希望你能够灵活运用 Git 在实际项目中进行版本管理。

14. 结束语

  1. 本节内容已经全部介绍完毕,希望通过这篇文章,大家对 Git 有了更深入的理解和认识。
  2. 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!点我关注❤️

相关文章:

【Git】Git 完全指南:从入门到精通

Git 完全指南&#xff1a;从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一&#xff0c;它帮助开发者高效地管理项目&#xff0c;支持分布式协作和版本控制。无论是个人项目还是团队开发&#xff0c;Git 都能提供强大的功能来跟踪、管理代码变更&#xff0c;并保障…...

webrtc ios h264 硬编解码

webrtc ios h264 硬编解码 一 ios 系统支持 从ios8开始&#xff0c;苹果公司开放了硬解码和硬编码API&#xff08;即 VideoToolbox.framework API&#xff09; 二 主要api 1 主要解码函数 VTDecompressionSessionCreate // 创建解码 session VTDecompressionSession…...

ubuntu20.04更换安装高版本CUDA以及多个CUDA版本管理

Ubuntu 20.04下多版本CUDA的安装与切换 CUDA安装配置环境变量软连接附上参考博客CUDA安装 cuda官方下载地址 因为我需要安装的是11.1版本的,所以这里按着11.1举例安装 安装命令如下: wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cu…...

生鲜食品o2o商城系统|Java|SSM|VUE| 前后端分离

【重要1⃣️】前后端源码万字文档部署文档 【重要2⃣️】正版源码有问题包售后 【重要3⃣️】可复制品不支持退换货 【包含内容】 【一】项目提供非常完整的源码注释 【二】相关技术栈文档 【三】源码讲解视频 【其它服务】 【一】可…...

C 语言静态库与动态库的生成和使用

在 YouTube 上找到一个视频 动态链接库静态链接库的生成和使用&#xff0c;它把用 GCC 生成静态库和动态库&#xff0c;以及如何使用他们说的很明白&#xff0c;有条件的可以直接看那个视频。本文就是一个观后的实操和笔记&#xff0c;加添了更多如何查看动态库&#xff0c;静态…...

分布式锁的实现方案有哪些?各自的原理是怎样的?使用场景有哪些?与单体架构中锁区别?存在哪些问题?如何解决?注意事项?

一、分布式锁的实现方案 分布式锁的实现方案主要包括以下几种&#xff1a; 基于数据库的分布式锁&#xff1a; 利用数据库的事务特性来实现锁功能。在数据库中创建一个具有唯一约束的锁表&#xff0c;加锁时插入一行记录&#xff0c;释放锁时删除这行记录。简单易用&#xf…...

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…...

python学习——元组的创建于删除

在 Python 中&#xff0c;元组&#xff08;tuple&#xff09;是一种内置的数据类型&#xff0c;用于存储不可变的有序元素集合。以下是关于 Python 元组的一些关键点&#xff1a; 文章目录 定义元组1. 使用圆括号 ()2. 使用 tuple() 函数3. 使用单个元素的元组4. 不使用圆括号…...

智能化图书馆导航系统方案之系统架构与核心功能设计

hello~这里是维小帮&#xff0c;点击文章最下方获取图书馆导航系统解决方案&#xff01;如有项目需求和技术交流欢迎大家私聊我们~撒花&#xff01; 针对传统图书馆在图书查找困难、座位紧张、空间导航不便方面的问题&#xff0c;本文深入剖析了基于高精度定位、3D建模、图书搜…...

Linux网络——IO模型和多路转接

通常所谓的IO&#xff0c;其本质就是等待通信和进行通信&#xff0c;即IO 等 拷贝。 那么想要做到高效的IO&#xff0c;就要在单位时间内&#xff0c;减少“等”的比重。 一.五种IO模型 阻塞 IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方…...

浅谈网络 | 应用层之HTTP协议

目录 HTTP 请求的准备HTTP 请求的构建HTTP 请求的发送过程HTTP 返回的构建HTTP 2.0QUIC 协议HTTP 3.0 在讲完传输层之后&#xff0c;我们接下来进入应用层的内容。应用层的协议种类繁多&#xff0c;那从哪里开始讲起呢&#xff1f;不妨从我们最常用、最熟悉的 HTTP 协议 开始。…...

【CSS】页面滚动到一定位置时,指定区域固定不变

一. 需求 移动端&#xff1a;下滑时&#xff0c;当下滑到一定位置时&#xff0c;指定区域不跟随下滑-【固定跟随区域】一直在顶部效果 &#xff08;1&#xff09;未滚动前 &#xff08;2&#xff09;滚动后 二. 实现 <template><div class"global-application…...

瀚高创库建表pgsql

1.瀚高下载地址&#xff1a; 下载 (highgo.com)https://www.highgo.com/down_main.html 2.瀚高linux安装 上传deb文件到ubuntu系统中 执行 dpkg -i hgdb-see-4.5.8-fe4791c.x86_64.deb 命令安装数据库 安装完成后&#xff0c;会在/opt 目录下生成安装目录 数据库安装完毕后…...

Vim 高级操作与技巧指南

在上一篇文章中&#xff0c;我们了解了 Vim 的基本操作和模式&#xff0c;掌握了如何进行文件编辑、光标移动、文本操作等基本技能。现在&#xff0c;我们将深入探讨 Vim 的一些高级功能&#xff0c;包括插件管理、脚本编写、定制快捷键等内容&#xff0c;以进一步提高你的工作…...

Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?

Vue 3.0 之所以使用 Proxy API 替代 Object.defineProperty,主要是为了提升性能、减少代码复杂性,并解决 Vue 2.x 在响应式处理中的一些局限性。下面我们通过对比这两种方式的工作原理、优缺点,并结合实际项目代码示例来详细讲解。 1. Object.defineProperty 的局限性 在 …...

【基于规则】n-sigma

在正态分布中: 约68%的数据点会落在均值1σ的范围内约95%的数据点会落在均值2σ的范围内约99.7%的数据点会落在均值3σ的范围内这称为68-95-99.7法则(Empirical Rule)。 假设我们有一组数据,其均值为μ,标准差为σ。某个数据点x的n-sigma计算公式如下: 若z=1.2,说明该…...

JavaScript 判断字符串是否包含子字符串的几种方法

这里写目录标题 方法 1: 使用 includes()方法 2: 使用 indexOf()方法 3: 使用正则表达式方法 4: 使用 search()方法 5: 用 startsWith() 或 endsWith()推荐使用 JavaScript 判断字符串是否包含子字符串&#xff0c;不要只知道 indexOf() &#xff0c;还可以尝试一下其他写法。 …...

goframe框架bug-记录

implement not found for interface ICompany, forgot register? 错误解决检查&#xff1a; 1.有没有init 2. 注入问题 3. 注入问题...

Docker:在 ubuntu 系统上生成和加载 Docker 镜像

本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…...

长时间无事可做是个危险信号

小马加入的是技术开发部&#xff0c;专注于Java开发。团队里有一位姓隋的女同事&#xff0c;是唯一的web前端工程师&#xff0c;负责页面开发工作&#xff0c;比小马早两个月入职。公司的项目多以定制化OA系统为主&#xff0c;后端任务繁重&#xff0c;前端工作相对较少。在这样…...

【小白学机器学习39】如何用numpy生成总体,生成样本samples

目录 1 目的&#xff1a;研究 样本和总体之间的关系 2 先生成1个理论总体 2.0 下面是关于这一步的完整代码 2.1 一般情况下&#xff0c;我们先生成一个符合正态分布的总体 2.1.1 设置总体 &#xff0c;或者说生成一个总体 2.2 为什么一定要是一个符合正态分布的总体&…...

redis的主从复制

redis主从复制 一、主从复制概念二、主从模式运行原理2.1主从复制的演示&#xff1a;2.2查看主从结构信息&#xff1a;2.3AOF文件对主从关系的影响2.4主从节点建立复制流程图 三、主从复制的拓扑结构3.1 一主一从结构3.2 一主多从结构3.3 树形主从结构 四、数据同步psync4.1全量…...

数据结构与算法(排序算法)

排序的概念 1. 排序是指将一组数据&#xff0c;按照特定的顺序进行排列的过程。 2. 这个过程通常是为了使数据更加有序&#xff0c;从而更容易进行搜索、比较或其他操作。 常见的排序算法 插入排序 1. 把待排序的记录&#xff0c;按其关键码值的大小&#xff0c;逐个插入到一…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

三格电子—EtherNet IP转Modbus RTU网关

EtherNet/IP转Modbus RTU网关 SG-EIP-MOD-210 产品用途 SG-EIP-MOD-210网关可以实现将Modbus接口设备连接到 EtherNet/IP网络中。用户不需要了解具体的Modbus和 EtherNet/IP协议即可实现将Modbus设备挂载到 EtherNet/IP接口的PLC上&#xff0c;并和Modbus设备进行数据交互。拓…...

centos7下安装haproxy2.2

1、安装epel yum install epel-release2、下载并安装ius的centos7软件镜像 wget https://repo.ius.io/ius-release-el7.rpm rpm -ivh ius-release-el7.rpm3、安装haproxy yum search haproxy yum install haproxy224、启动服务 systemctl status haproxy systemctl start h…...

Spring Boot英语知识网站:安全与维护

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了英语知识应用网站的开发全过程。通过分析英语知识应用网站管理的不足&#xff0c;创建了一个计算机管理英语知识应用网站的方案。文章介绍了英语知识应用网站的系…...

PHP实现终端表格提取

背景 刚开始使用restic想要获取终端的输出数据,默认的终端信息如下示例 restic snapshotsrepository 5816ba52 opened (version 2, compression level auto) ID Time Host Tags Paths Size ------------------------------------…...

c++ 拓扑排序

概念 拓扑排序是一种线性排序算法&#xff0c;主要用于有向无环图 (DAG, Directed Acyclic Graph) 中&#xff0c;对顶点进行排序&#xff0c;使得对于每一条边 u→v&#xff0c;顶点 u 都排在顶点 v之前。 特点 适用于有向无环图。 拓扑排序的结果不唯一&#xff08;如果有…...

Vue3的双向数据绑定

如果你有多个 ref 类型的数据需要在父子组件之间实现双向绑定&#xff0c;可以使用 v-model 来进行多个数据的双向绑定。在 Vue 3 中&#xff0c;v-model 默认是针对 modelValue 的&#xff0c;但你可以通过指定自定义的属性名来实现多个双向绑定。 多个 v-model 双向绑定的实…...

android-sdk 安装脚本、android-sdk(和platform-tools)国内镜像

android-sdk国内镜像 https://mirrors.cloud.tencent.com/AndroidSDK/ android-sdk安装脚本 android-sdk 安装脚本 androidSdk_install.sh #!/bin/bash #[描述] android-sdk 安装# set -eu shopt -s expand_aliasesAndroid_SDK_D/app5/android-sdk-home/JAVA17_D/app/zulu17…...

SAR ADC 系列16:基于运放的高精度比较器

高精度比较器的设计目标 静态开环运放比较器 共模为&#xff0c;Id*R1&#xff0c;不稳定&#xff0c;随Id和R1变化。 正反馈。Vin增加&#xff0c;Vout-减小 推推推推推&#xff0c;Vout-又减小&#xff0c;正反馈 同时&#xff0c;MP2 < MP1 时&#xff0c;增益提升。MP…...

spring boot 调用C#封装的DLL文件中的函数

1、C#方法 using Infrastructure; using System.Runtime.InteropServices; using System.Text; using System.Text.Json;namespace PH.Resistance;/// <summary> /// 预热器 阻力计算 /// </summary> public class PHResistance {private double? C1_outlet_YP01…...

《C++ 与神经网络:自动微分在反向传播中的高效实现之道》

在深度学习蓬勃发展的今天&#xff0c;神经网络成为了众多领域的核心技术驱动力。而反向传播算法作为训练神经网络的关键手段&#xff0c;其背后的自动微分技术的高效实现尤为重要&#xff0c;特别是在 C 这样追求性能与内存控制极致的编程语言环境下。 神经网络通过大量的参数…...

AppFlow:支持飞书机器人调用百炼应用

AppFlow&#xff1a;支持飞书机器人调用百炼应用 简介&#xff1a; 本文介绍了如何创建并配置飞书应用及机器人&#xff0c;包括登录飞书开发者后台创建应用、添加应用能力和API权限&#xff0c;以及通过AppFlow连接流集成阿里云百炼服务&#xff0c;最后详细说明了如何将机器…...

Axure RP教程:创建高效用户界面和交互

Axure RP是一款广受好评的软件&#xff0c;专门用于设计精致的用户界面和交互体验。这款软件提供了众多UI控件&#xff0c;并根据它们的用途进行了分类。与此同时&#xff0c;国产的即时设计软件作为Axure的替代品&#xff0c;支持在线协作和直接在浏览器中使用&#xff0c;无需…...

【Bug】el-date-picker组件时间差

这个组件默认是国际标准时间 2024-11-27T07:56:37.000Z 表示的是 UTC 时间。如果你当前所在的时区是 UTC8&#xff08;例如中国&#xff09;&#xff0c;那么这个时间实际上是比你选择的时间早 8 个小时 T表示分隔符&#xff0c;Z表示的是UTC 解决&#xff1a;给el-date-pic…...

Ubuntu问题 -- 使用scp将本机文件传输至ubuntu服务器中

目的 临时没有文件传输工具使用一条命令快速传输指定文件或文件夹 使用scp命令 传输指定文件 scp -P 22 D:\Storage\myCache\UE\Linux_ue_demo.zip txl10.1.112.93:/home/txl-P是远程机器的ssh端口号, SCP&#xff08;安全复制协议&#xff09;使用和SSH&#xff08;安全外壳…...

每日速记10道java面试题02

其他面试题 每日速记10道java面试题01-CSDN博客 目录 一、Java 中 String、StringBuffer 和 StringBuilder 的区别是什么? 二、java的Stringbuilder是怎么实现的&#xff1f; 三、Java 中包装类型和基本类型的区别是什么? 四、接口和抽象类有什么区别&#xff1f; ​编辑…...

解决 Vim 上下左右变成 ABCD 的问题

解决 Vim 上下左右变成 ABCD 的问题 Vim 是 Linux 和 Unix 系统上广受欢迎的编辑器&#xff0c;但许多用户在首次使用时会遇到一些让人困惑的问题&#xff0c;例如&#xff1a;按下上下左右键时光标不移动&#xff0c;而是输出 A、B、C、D 字母。这篇文章将深入分析该问题的解…...

并发编程(14)——内存栅栏

文章目录 十四、day141. 内存栅栏1.1 什么是栅栏1.2 栅栏和原子操作的对比1.2.1 获取操作1.2.2 释放操作 1.3 线程可见顺序1.4 通过栅栏保证指令编排顺序1.5 通过栅栏令非原子操作服从内存次序1.6 同步线程间的内存访问 十四、day14 在学习完内存模型、内存序、原子类型、操作…...

消息中间件用途介绍

1. 解耦&#xff08;Decoupling&#xff09;&#xff1a; • 消息中间件能够将消息的生产者&#xff08;Producer&#xff09;和消费者&#xff08;Consumer&#xff09;分离开来&#xff0c;使它们不必直接相互依赖。这种设计降低了系统的耦合度&#xff0c;提升了系统的可扩展…...

Algorithms and Data Structures in C++ by Mohammed Yasir Eramangadan

MP4 创建 |视频&#xff1a;h264、1280720 |音频&#xff1a;AAC&#xff0c;44.1 KHz&#xff0c;2 通道 类型&#xff1a;在线学习 |语言&#xff1a;英文 字幕 |持续时间&#xff1a; 159 讲座 &#xff08; 10h 43m &#xff09; |大小&#xff1a; 3.5 GB “通过专家制作…...

Binder架构

一、架构 如上图&#xff0c;binder 分为用户层和驱动层两部分&#xff0c;用户层有客户端&#xff08;Client&#xff09;、服务端&#xff08;Server&#xff09;、服务管理&#xff08;ServiceManager&#xff09;。 从用户空间的角度&#xff0c;使用步骤如下&#xff08;…...

【第十一课】Rust并发编程(二)

目录 前言 Channel 多生产者 前言 在上一节中&#xff0c;我们介绍了Rust中并发编程的方式之一&#xff1a;Fork和Join&#xff0c;通过新建线程提升代码的效率&#xff0c;这节课我们介绍并发编程的第二种方式&#xff1a;通道。Channel就类似于水管&#xff0c;通过Channe…...

网络知识1-TCP/IP模型

从用户端到服务端&#xff0c;tcp/ip模型可分为应用层、传输层、网络层、网络接口层 以下使用寄快递为例进行解释 应用层职责&#xff1a; 只关注与为用户提供应用功能&#xff0c;如HTTP、FTP、telnet、DNS、SMTP等 &#xff0c;应用层的职责就像我们寄快递时将快递给快递员…...

burpsuite(2)最新版burpsuite安装教程

一、安装Java 1.安装jdk21&#xff0c;直接官网下载 下载链接&#xff1a;Java21 2.cmd 输出java&#xff08;查看java是否已经被安装&#xff09; 3.java -version&#xff08;查看java版本&#xff09; 二、安装burpsuite 4.下载burpsuite最新版本&#xff0c;选择jar方式…...

微知-arp如何删除所有表项?(arp -d; ip neighbor delete 192.168.0.100)

ar命令删掉所有表项 sudo arp -d使用ip命令 ip neighbor delete 192.168.0.100...

使用guzzlehttp异步多进程实现爬虫业务

Python和PHP核心技术共享平台 背景 小哥近来在通过动态代理池爬取一些公司需要的大文件pdf规格书的处理。遇到的难点&#xff0c;如何保证服务器CPU、连接数等正常情况下&#xff0c;多进程、异步快速处理这些业务并且保证准确。下面小哥就给看官唠嗑一下&#xff0c;我使用gu…...

websocket前后端长连接之java部分

一共有4个类,第一个WebSocketConfig 配置类 Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Autowiredprivate WebSocketHandler webSocketHandler;Autowiredprivate WebSocketInterceptor webSocketInterceptor;Overridepubli…...