Git指南-从入门到精通

news2025/2/19 8:25:47

代码提交和同步命令

流程图如下:

  • 第零步: 工作区与仓库保持一致
  • 第一步: 文件增删改,变为已修改状态
  • 第二步: git add ,变为已暂存状态

bash

$ git status
$ git add --all # 当前项目下的所有更改
$ git add .  # 当前目录下的所有更改
$ git add xx/xx.py xx/xx2.py  # 添加某几个文件
  • 第三步: git commit,变为已提交状态

bash

$ git commit -m "<这里写commit的描述>"
  • 第四步: git push,变为已推送状态

bash

$ git push -u origin master # 第一次需要关联上
$ git push # 之后再推送就不用指明应该推送的远程分支了
$ git branch # 可以查看本地仓库的分支
$ git branch -a # 可以查看本地仓库和本地远程仓库(远程仓库的本地镜像)的所有分支

一般来说,在某个分支下,最常用的操作如下:

bash

$ git status
$ git add -a
$ git status
$ git commit -m 'xxx'
$ git pull --rebase
$ git push origin xxbranch

代码撤销和撤销同步命令

流程图如下:

已修改,但未暂存

bash

$ git diff # 列出所有的修改
$ git diff xx/xx.py xx/xx2.py # 列出某(几)个文件的修改

$ git checkout # 撤销项目下所有的修改
$ git checkout . # 撤销当前文件夹下所有的修改
$ git checkout xx/xx.py xx/xx2.py # 撤销某几个文件的修改
$ git clean -f # untracked状态,撤销新增的文件
$ git clean -df # untracked状态,撤销新增的文件和文件夹

# Untracked files:
#  (use "git add <file>..." to include in what will be committed)
#
#	xxx.py

git checkout 与后文的切换分支命令几乎一致,事实上,checkout 作为单个命令有点超载(它承载了很多独立的功能),因此在 Git 2.23 版本中,引入了一个名为 git switch 的新命令,最终会取代 git checkout

已暂存,未提交

这个时候已经执行过git add,但未执行git commit,但是用git diff已经看不到任何修改。 因为git diff检查的是工作区与暂存区之间的差异。

bash

$ git diff --cached # 这个命令显示暂存区和本地仓库的差异

$ git reset # 暂存区的修改恢复到工作区
$ git reset --soft # 与git reset等价,回到已修改状态,修改的内容仍然在工作区中
$ git reset --hard # 回到未修改状态,清空暂存区和工作区

git reset --hard 操作等价于 git reset 和 git checkout 2步操作

已提交,未推送

执行完commit之后,会在仓库中生成一个版本号(hash值),标志这次提交。之后任何时候,都可以借助这个hash值回退到这次提交。

bash

$ git diff <branch-name1> <branch-name2> # 比较2个分支之间的差异
$ git diff master origin/master # 查看本地仓库与本地远程仓库的差异

$ git reset --hard origin/master # 回退与本地远程仓库一致
$ git reset --hard HEAD^ # 回退到本地仓库上一个版本
$ git reset --hard <hash code> # 回退到任意版本
$ git reset --soft/git reset # 回退且回到已修改状态,修改仍保留在工作区中。

已推送到远程

java

$ git push -f orgin master # 强制覆盖远程分支
$ git push -f # 如果之前已经用 -u 关联过,则可省略分支名

慎用,一般情况下,本地分支比远程要新,所以可以直接推送到远程,但有时推送到远程后发现有问题,进行了版本回退,旧版本或者分叉版本推送到远程,需要添加 -f参数,表示强制覆盖。

其它常用命令

关联远程仓库

  • 如果还没有Git仓库,需要初始化

bash

$ git init
  • 如果想关联远程仓库

bash

$ git remote add <name> <git-repo-url>
# 例如 git remote add origin https://github.com/xxxxxx # origin是远程仓库的名称
  • 如果想关联多个远程仓库

bash

$ git remote add <name> <another-git-repo-url>
# 例如 git remote add coding https://coding.net/xxxxxx
  • 查看关联了哪些仓库或者地址

bash

$ git remote -v
# origin https://github.com/Seven-97/SevenBlog.git (fetch)
# origin https://github.com/Seven-97/SevenBlog.git (push)
  • 如果远程有仓库,需要clone到本地

bash

$ git clone <git-repo-url>
# 关联的远程仓库将被命名为origin,这是默认的。
  • 如果想把别人仓库的地址改为自己的

bash

$ git remote set-url origin <your-git-url>

配置自己的Git

  • 查看当前的配置

bash

$ git config --list
  • 配置自己的名字

bash

$ git config --global user.name "<name>"
#  --global为可选参数,该参数表示配置全局信息
  • 希望别人看到你的commit可以联系到你

bash

$ git config --global user.email "<email address>"
  • 有些命令很长,能不能简化一下

bash

$ git config --global alias.logg "log --graph --decorate --abbrev-commit --all"
# 之后就可以开心地使用 git log了

切换分支

新建仓库后,默认生成了master分支

  • 新建分支并切换

bash

$ git checkout -b <new-branch-name>
# 例如 git checkout -b dev
# 如果仅新建,不切换,则去掉参数 -b
  • 查看当前有哪些分支

bash

$ git branch
# * dev
#   master # 标*号的代表当前所在的分支
  • 查看当前本地&远程有哪些分支

bash

$ git branch -a
# * dev
#   master
#   remotes/origin/master
  • 切换到现有的分支

bash

$ git checkout master

更新本地/远端代码 push/poll

  • 将本地master分支推送到远程去

bash

$ git push origin master
# 你可以使用git push -u origin master将本地分支与远程分支关联,之后仅需要使用git push即可。
  • 远程分支更新了,需要更新代码

bash

$ git pull origin <branch-name>
# 之前如果push时使用过-u,那么就可以省略为git pull
  • 本地有修改,能不能先git pull

shell

$ git stash # 工作区修改暂存
$ git pull  # 更新分支
$ git stash pop # 暂存修改恢复到工作区

git pull 实际上包含了两个操作:fetch和merge。当使用git pull命令时,Git会自动下载最新代码,并尝试将最新代码合并到当前分支。git fetch命令只是从远程库下载最新代码,但并不自动合并到本地分支。

  • 如果我们希望自动合并最新代码到当前分支,并且不需要查看最新代码的变动,可以使用git pull命令。
  • 如果我们只想下载最新代码到本地,并需要查看最新代码的变动后才决定是否进行合并,可以使用git fetch命令。

撤销操作 reset

  • 恢复暂存区文件到工作区

bash

$ git checkout <file-name>
  • 恢复暂存区的所有文件到工作区

bash

$ git checkout .
  • 重置暂存区的某文件,与上一次commit保持一致,但工作区不变

bash

$ git reset <file-name>
  • 重置暂存区与工作区,与上一次commit保持一致

bash

$ git reset --hard <file-name>
# 如果是回退版本(commit),那么file,变成commit的hash码就好了。
  • 去掉某个commit

bash

$ git revert <commit-hash>
# 实质是新建了一个与原来完全相反的commit,抵消了原来commit的效果
  • reset回退错误恢复

bash

$ git reflog #查看最近操作记录
$ git reset --hard HEAD{5} #恢复到前五笔操作
$ git pull origin backend-log #再次拉取代码

版本回退与前进 status、log、reflog

  • 查看当前状态

bash

$ git status
  • 查看历史版本

bash

$ git log
commit 9a3d34be1e26563e198ee6aea72d32ad68b607d0 (HEAD -> main, origin/main, origin/HEAD)
Author: seven <415849169@qq.com>
Date:   Tue Jul 9 19:10:11 2024 +0800

    更新

commit 47c32de67a28df58ea3bd0b88137f1bd19a12969
Author: Seven <415849169@qq.com>
Date:   Tue Jul 9 00:30:11 2024 +0800

    更新

commit 294814faf55fc4f01e3b0a28c96b5acdf1348333
Author: Seven <415849169@qq.com>
Date:   Tue Jul 9 00:22:15 2024 +0800

    更新内容

commit 15026d42c4d3a6093bde4578484e2bb64824b9e8
Author: Seven <415849169@qq.com>
  • 这样的log不好看,可以试试以下命令

bash

$ git log --graph --decorate --abbrev-commit --all
* commit 9a3d34b (HEAD -> main, origin/main, origin/HEAD)
| Author: seven <415849169@qq.com>
| Date:   Tue Jul 9 19:10:11 2024 +0800
|
|     更新
|
* commit 47c32de
| Author: Seven <415849169@qq.com>
| Date:   Tue Jul 9 00:30:11 2024 +0800
|
|     更新
|
* commit 294814f
| Author: Seven <415849169@qq.com>
| Date:   Tue Jul 9 00:22:15 2024 +0800
|
|     更新内容
|
* commit 15026d4
| Author: Seven <415849169@qq.com>
| Date:   Tue Jul 9 00:16:23 2024 +0800
  • 检出到任意版本

bash

$ git checkout a5d88ea
# hash码很长,通常6-7位就够了
  • 远程仓库的版本很新,但是还是想用老版本覆盖

bash

$ git push origin master --force
# 或者 git push -f origin master
  • 觉得commit太多了? 可以使用rebase将多个commit合并为1个

bash

$ git rebase -i HEAD~4
# 这个命令,将最近4个commit合并为1个,HEAD代表当前版本。将进入VIM界面,你可以修改提交信息。推送到远程分支的commit,不建议这样做,多人合作时,通常不建议修改历史。
  • 想回退到某一个版本

bash

$ git reset --hard <hash>
# 例如 git reset --hard a3hd73r
# --hard代表丢弃工作区的修改,让工作区与版本代码一模一样,与之对应,--soft参数代表保留工作区的修改。
  • 想回退到上一个版本,有没有简便方法?

bash

$ git reset --hard HEAD^
  • 回退到上上个版本呢?

bash

$ git reset --hard HEAD^^
# HEAD^^可以换作具体版本hash值。
  • 回退错了,想到下一个版本

bash

$ git reflog
# 这个命令保留了最近执行的操作及所处的版本,每条命令前的hash值,则是对应版本的hash值。使用上述的git checkout 或者 git reset命令 则可以检出或回退到对应版本。
  • 刚才commit信息写错了,修改上一次提交的commit信息

bash

$ git commit --amend

分支合并 merge

每个分支上都有各自独有的提交,这意味着没有一个分支包含了修改的所有内容。因此通过合并分支来解决这个问题。

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中。比如分支结构如下:

其它分支合并到master分支

当前分支是master

shell

git checkout master

把issueFix中的内容Merge进来:

shell

git merge issueFix

如果没有冲突的话,merge完成。有冲突的话,git会提示那个文件中有冲突,比如有如下冲突:

shell

<<<<<<< HEAD:test.c
printf (“test1″);
=======
printf (“test2″);
\>>>>>>> issueFix:test.c

可以看到 ======= 隔开的上半部分,是 HEAD(即 master 分支,在运行 merge 命令时检出的分支)中的内容,下半部分是在 issueFix 分支中的内容。

解决冲突的办法无非是二者选其一或者由你亲自整合到一起。比如你可以通过把这段内容替换为下面这样来解决:

shell

printf (“test2″);

这个解决方案各采纳了两个分支中的一部分内容,而且删除了 <<<<<<<,=======,和>>>>>>> 这些行。在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决(resolved)。因为一旦暂存,就表示冲突已经解决。

合并后的分支图如下:


注意,这次合并的实现,由于当前 master 分支所指向的 commit (C4)并非想要并入分支(issueFix)的直接祖先,Git 不得不进行一些处理。就此例而言,Git 会用两个分支的末端(C4 和 C5)和它们的共同祖先(C2)进行一次简单的三方合并。对三方合并的结果作一新的快照,并自动创建一个指向它的 commit(C6)

退出合并工具以后,Git 会询问你合并是否成功。如果回答是,它会为你把相关文件暂存起来,以表明状态为已解决。然后可以用 git commit 来完成这次合并提交。

因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin 推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!
  5. 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。
master分支合并到当前分支

以下是合并master分支到你的当前分支的基本步骤:

  1. 确保在正确的分支上:首先,确保当前所在的分支是想要合并master分支到的地方。例如,如果想要将master合并到feature-branch,需要先切换到feature-branch:

    shell

    git checkout feature-branch
  2. 更新分支:在合并之前,最好先更新分支,以确保它是最新的。可以通过拉取master分支的最新更改来实现这一点:

    shell

    git pull origin master

    这会从远程仓库的master分支拉取最新的更改,并尝试将它们合并到你的当前分支。如果master分支有新的提交,这可能会导致合并冲突。

  3. 合并master分支:一旦分支是最新的,可以开始合并过程。使用git merge命令来合并master分支:

    shell

    git merge master

    这会将master分支的更改合并到当前分支。如果两个分支之间没有冲突,合并将自动完成。如果有冲突,Git会告诉你哪些文件有冲突,此时就需要手动解决这些冲突。

  4. 解决冲突(如果有):如果合并过程中出现冲突,Git会暂停合并并告诉你哪些文件需要手动解决冲突。你需要打开这些文件,找到并解决冲突。解决冲突后,使用以下命令标记冲突已解决:

    shell

    git add <冲突文件>

    然后继续合并:

    shell

    git commit

    这将创建一个新的合并提交,包含所有解决的冲突。

  5. 推送更改:一旦合并完成并且所有冲突都已解决,你可以将更改推送到远程仓库:

    shell

    git push origin feature-branch

    确保替换feature-branch为你的分支名称。

注意事项
  • 在合并之前,始终确保你的分支是最新的,以避免不必要的冲突。
  • 如果你在合并过程中遇到问题,可以使用git merge --abort来中止合并并返回到合并前的状态。
  • 使用git log或gitk可以帮助理解分支的历史和可能的冲突点。

Git代码管理规范

分支命名

master 分支

master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。master 分支一般由 release 以及 hotfix 分支合并,任何时间都不能直接修改代码。

develop 分支

develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。

feature 分支

开发新功能时,以develop为基础创建feature分支。

分支命名时以 feature/ 开头,后面可以加上开发的功能模块, 命名示例:feature/user_modulefeature/cart_module

test分支

test为测试环境分支,外部用户无法访问,专门给测试人员使用,版本相对稳定。

release分支

release 为预上线分支(预发布分支),UAT测试阶段使用。一般由 test 或 hotfix 分支合并,不建议直接在 release 分支上直接修改代码。

hotfix 分支

线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。修复完成后,需要合并到 master 分支和 develop 分支。

分支命名以hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。

分支与环境对应关系

在系统开发过程中常用的环境:

  • DEV 环境(Development environment):用于开发者调试使用
  • FAT环境(Feature Acceptance Test environment):功能验收测试环境,用于测试环境下的软件测试者测试使用
  • UAT环境 (User Acceptance Test environment):用户验收测试环境,用于生产环境下的软件测试者测试使用
  • PRO 环境(Production environment):生产环境

对应关系:

分支功能环境可访问
master主分支,稳定版本PRO
develop开发分支,最新版本DEV
feature开发分支,实现新特性
test测试分支,功能测试FAT
release预上线分支,发布新版本UAT
hotfix紧急修复分支,修复线上bug
分支合并流程规范

业界常见的两大主分支(master、develop)、三个辅助分支(feature、release、hotfix)的生命周期:

以上生命周期仅作参考,不同开发团队可能有不同的规范,可自行灵活定义。

Git Commit Message规范

Git commit message规范指提交代码时编写的规范注释,编写良好的Commit messages可以达到3个重要的目的:

  • 加快代码review的流程
  • 帮助我们编写良好的版本发布日志
  • 让之后的维护者了解代码里出现特定变化和feature被添加的原因
Angular Git Commit Guidelines

业界应用的比较广泛的是Angular Git Commit Guidelines:

highlighter- XML

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
  • type:提交类型
  • scope:可选项,本次 commit 波及的范围
  • subject:简明扼要的阐述下本次 commit 的主旨,在Angular Git Commit Guidelines中强调了三点。使用祈使句,首字母不要大写,结尾无需添加标点
  • body: 同样使用祈使句,在主体内容中我们需要把本次 commit 详细的描述一下,比如此次变更的动机
  • footer: 描述下与之关联的 issue 或 break change
简易版

项目中实际可以采用简易版规范:

highlighter- XML

<type>(<scope>):<subject>
type规范

Angular Git Commit Guidelines中推荐的type类型如下:

  • feat: 新增功能
  • fix: 修复bug
  • docs: 仅文档更改
  • style: 不影响代码含义的更改(空白、格式设置、缺失 分号等)
  • refactor: 既不修复bug也不添加特性的代码更改
  • perf: 改进性能的代码更改
  • test: 添加缺少的测试或更正现有测试
  • chore: 对构建过程或辅助工具和库(如文档)的更改

除此之外,还有一些常用的类型:

  • delete:删除功能或文件
  • modify:修改功能
  • build:改变构建流程,新增依赖库、工具等(例如webpack、gulp、npm修改)
  • test:测试用例的新增、修改
  • ci:自动化流程配置修改
  • revert:回滚到上一个版本
单次提交注意事项
  • 提交问题必须为同一类别
  • 提交问题不要超过3个
  • 提交的commit发现不符合规范,git commit --amend -m "新的提交信息"或 git reset --hard HEAD 重新提交一次

配置.gitignore文件

.gitignore是一份用于忽略不必提交的文件的列表,项目中可以根据实际需求统一.gitignore文件,减少不必要的文件提交和冲突,净化代码库环境。

通用文件示例:

highlighter- Bash

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/

# Log file
*.log
/logs*

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
*.cmd

其他

此外,还有一些其他建议:

  • master 分支的每一次更新,都建议打 tag 添加标签,通常为对应版本号,便于管理
  • feature分支、hotfix分支在合并后可以删除,避免分支过多管理混乱
  • 每次 pull 代码前,提交本地代码到本地库中,否则可能回出现合并代码出错,导致代码丢失

 ​ ​

            关注灵活就业新业态,关注公账号:贤才宝(贤才宝https://www.51xcbw.com) ​ 

 

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

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

相关文章

Spring boot(maven) - Mybatis 超级入门版

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…

Spark 性能优化 (三):RBO 与 CBO

1. RBO 的核心概念 在 Apache Spark 的查询优化过程中&#xff0c;规则优化&#xff08;Rule-Based Optimization, RBO&#xff09; 是 Catalyst 优化器的一个关键组成部分。它主要依赖于一组固定的规则进行优化&#xff0c;而不是基于统计信息&#xff08;如 CBO - Cost-Base…

读 DeepSeek-R1 论文笔记

DeepSeek-R1&#xff1a;通过强化学习激发大语言模型的推理能力 DeepSeek-AI 摘要 我们推出第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero作为无需监督微调(SFT)预训练阶段、直接通过大规模强化学习(RL)训练的基础模型&#xff0c;展现出卓越的推理能力。…

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理&#xff08;一&#xff09;光流法&#xff08;二&#xff09;卡尔曼滤波&#xff08;三&#xff09;粒子滤波 五、基于…

如何保持长久无痛苦的学英语?

“无痛苦”学英语&#xff1f; 听起来像天方夜谭&#xff0c;但并非不可能&#xff01; 关键在于&#xff0c;把英语学习变成你生活的一部分&#xff0c;融入你的兴趣和目标&#xff0c; 这样才能摆脱痛苦&#xff0c;享受学习的过程。 1. 兴趣是最好的老师&#xff1a; 找到自…

Sequence to Sequence model

基础模型 基础模型是用RNN模型&#xff0c;前部分是encoder用来寻找法语输入的编码&#xff0c;后半部分是decoder用来生成英文翻译作为输出&#xff0c;每次输出一个单词&#xff0c;直到输出结束标志如EOS。 下面是另一个例子&#xff0c;在CNN模型输出层之前会输出图片的向…

6.appender

文章目录 一、前言二、源码解析AppenderUnsynchronizedAppenderBaseOutputStreamAppenderConsoleAppenderFileAppenderRollingFileAppenderFileNamePattern 三、总结 一、前言 前一篇文章介绍了appender、conversionRule、root和logger节点的解析, 为的是为本篇详细介绍它们的…

Golang的消息队列架构

一、消息队列的定义和作用 消息队列是一种在不同组件之间传递消息的通信机制。它可以解耦系统的各个部分&#xff0c;提高系统的可靠性和扩展性。消息队列可以在系统之间传递消息&#xff0c;并且在消息发送者和消息接收者之间进行异步通信&#xff0c;使得系统可以更加灵活和高…

GESP5级语法知识(十一):高精度算法(一)

高精度加法&#xff1a; #include<iostream> #include<string> #include<algorithm> using namespace std; const int N501;//高精度数的最长长度 //c[]a[]b[]:高精度加法方案一&#xff1a;对应位相加&#xff0c;同时处理进位 void h_add_1(int a[],int b…

【前端】 react项目使用bootstrap、useRef和useState之间的区别和应用

一、场景描述 我想写一个轮播图的程序&#xff0c;只是把bootstrap里面的轮播图拉过来就用上感觉不是很合适&#xff0c;然后我就想自己写自动轮播&#xff0c;因此&#xff0c;这篇文章里面只是自动轮播的部分&#xff0c;没有按键跟自动轮播的衔接部分。 Ps: 本文用的是函数…

PYYAML反序列化详解

前言 最近看了很多pyyaml反序列化的漏洞利用&#xff0c;但是对漏洞怎么来的&#xff0c;没有进行很详细的分析&#xff0c;所以今天刚好学习一下反序列化的原理 Yaml基本语法 一个 .yml 文件中可以有多份配置文件&#xff0c;用 --- 隔开即可对大小写敏感YAML 中的值&#x…

LeeCode题库第十八题

项目场景&#xff1a; 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&…

Zookeeper 和 Redis 哪种更好?

目录 前言 &#xff1a; 什么是Zookeeper 和 Redis &#xff1f; 1. 核心定位与功能 2. 关键差异点 (1) 一致性模型 (2) 性能 (3) 数据容量 (4) 高可用性 3. 适用场景 使用 Zookeeper 的场景 使用 Redis 的场景 4. 替代方案 5. 如何选择&#xff1f; 6. 常见误区 7. 总结 前言…

公然上线传销项目,Web3 的底线已经被无限突破

作者&#xff1a;Techub 热点速递 撰文&#xff1a;Yangz&#xff0c;Techub News 今天早些时候&#xff0c;OKX 将上线 PI 的消息在圈内引起轩然大波&#xff0c;对于上线被板上钉钉为传销盘子的「项目」 &#xff0c;Techub News 联系了 OKX 公关&#xff0c;但对方拒绝置评…

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…

解锁网络安全:穿越数字世界的防护密码

个人主页&#xff1a;java之路-CSDN博客(期待您的关注) 目录 网络安全&#xff1a;数字时代的基石 网络安全面面观 &#xff08;一&#xff09;定义与范畴 &#xff08;二&#xff09;发展历程 网络安全面临的威胁 &#xff08;一&#xff09;恶意软件肆虐 &#xff08;二…

python爬虫解决无限debugger问题

方法一 关闭定时任务 关闭断点执行代码打开断点 # 无限debugger产生原因 # 1. web开发者工具打开 # 2. js代码中有debugger # 3. js有定时处理[推荐] for(let i0;i<99999;i){window.clearInterval(i)}方法二 关闭breakpoint 方法三 修改JS代码 使用fiddler&#xff0c;抓…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek&#xff08;深度求索&#xff09; 最近可谓火爆的一塌糊涂&#xff0c;具体的介绍这里不再赘述&#x…

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…

anolis os 8.9安装jenkins

一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…