GitHub新手入门 - 从创建仓库到协作管理
GitHub新手入门 - 从创建仓库到协作管理
GitHub 是开发者的社交平台,同时也是代码托管的强大工具。无论是个人项目、开源协作,还是团队开发,GitHub 都能让你轻松管理代码、版本控制和团队协作。今天,我们将从基础开始,带你了解如何在 GitHub 上创建仓库、管理分支、提交 Pull Request 和解决协作中的问题。
1. 介绍与初步配置
1.1 什么是Git和GitHub?
- Git 是一个分布式版本控制系统,用来记录文件的修改历史,可以追踪和管理源代码的变化。
- GitHub 是一个基于 Git 的在线平台,允许开发者存储、共享、协作开发项目。你可以把 GitHub 看作是 Git 的云端版。
1.2 版本控制的基本概念
版本控制用于记录文件或代码的变动历史,它帮助你:
- 追踪所有更改。
- 在项目中回退到先前版本。
- 多人协作时避免冲突,合并不同版本的代码。
1.3 注册和设置GitHub账户
- 访问 GitHub官网。
- 点击右上角的
Sign up
,注册一个新的账户。 - 按照提示完成账户创建,选择一个用户名并设置密码。
- 完成邮箱验证后,你的GitHub账户就创建成功了!
1.4 配置SSH密钥(可选,但推荐)
配置 SSH 密钥可以让你在没有每次输入用户名和密码的情况下推送代码到 GitHub:
- 在终端生成 SSH 密钥:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 将生成的公钥添加到 GitHub:
- 进入 GitHub 账户设置,找到 SSH and GPG keys。
- 点击 New SSH key,将你的公钥粘贴进去。
2. 创建仓库与克隆到本地
2.1 如何创建一个新仓库
- 登录 GitHub 后,点击右上角的
+
按钮,选择 New repository。 - 填写仓库名称(Repository name),可以选择添加描述(Description)。
- 选择仓库的可见性:Public(公开)或 Private(私有)。
- 勾选 Initialize this repository with a README,这将创建一个初始的 README 文件来描述项目。
- 点击 Create repository 完成创建。
2.2 GitHub的仓库结构和界面概述
- Code:显示所有代码文件。
- Issues:用于追踪 bugs、任务和功能请求。
- Pull requests:查看和管理代码提交请求。
- Actions:用于持续集成和部署的工作流。
- Projects:管理项目任务和进度。
- Wiki:用于项目文档的创建和编辑。
2.3 安装Git(Windows/Linux/macOS)
- Windows:下载安装 Git for Windows,按提示安装。
- Linux:在终端输入
sudo apt install git
(Ubuntu/Debian)或sudo yum install git
(CentOS)。 - macOS:输入
brew install git
(使用 Homebrew)。
2.4 克隆仓库的命令和过程
使用 GitHub 上仓库页面的 Clone or download
按钮获取仓库的 URL,接着在终端输入以下命令将仓库克隆到本地:
git clone https://github.com/username/repository.git
这将创建一个本地仓库副本,你可以开始进行修改。
3. 基本Git操作与分支管理
3.1 添加文件到暂存区(git add
)
当你修改文件后,Git 不会自动将更改加入版本控制,需使用 git add
命令来将更改添加到暂存区:
git add .
这个命令将所有修改过的文件添加到暂存区。
3.2 提交更改(git commit
)
提交操作将暂存区的更改保存到本地仓库:
git commit -m "提交说明"
-m
后面是你对该次提交的简短说明。
3.3 推送更改到远程仓库(git push
)
将本地仓库的提交推送到 GitHub 仓库:
git push origin main
这将会把你的更改上传到远程仓库的 main
分支。
3.4 从远程仓库拉取最新更改(git pull
)
当其他人也在同一个仓库中做了更改时,你需要使用 git pull
拉取最新的更改:
git pull origin main
3.5 创建分支(git branch
)
分支用于开发新特性或修复 bug,而不影响主代码。你可以使用以下命令创建一个新分支:
git branch new-branch
3.6 切换分支(git checkout
)
切换到你要操作的分支:
git checkout new-branch
3.7 合并分支(git merge
)
合并其他分支的更改到当前分支:
git merge new-branch
3.8 解决冲突
当多个分支修改同一部分内容时,可能会发生冲突。Git 会标记出冲突的部分,你需要手动解决并重新提交。
4. 提交和管理 Issue
在 GitHub 上,Issue 是用于记录、讨论和跟踪任务、bug 或功能请求的重要工具。无论是个人项目还是团队协作,管理 Issue 是确保开发进度和问题解决的关键。
4.1 创建一个 Issue
Issue 是管理项目中待办事项的常用方法。你可以在 GitHub 上创建 Issue 来记录任务、bug、功能请求或其他需要讨论的问题。
- 进入你的仓库:打开 GitHub,进入你要提交 Issue 的项目仓库。
- 点击 “Issues” 标签:在仓库页面上方的导航栏中找到并点击 Issues。
- 点击 “New issue”:在 Issue 页面,点击右侧的 New issue 按钮,开始创建新问题。
- 填写标题和描述:
- 标题:简洁明了地描述问题或任务。
- 描述:详细描述问题的背景、重现步骤、预期行为、实际行为等。你可以使用 GitHub 的 Markdown 语法格式化文本,使内容更易读。
- 可选:你可以附上截图或日志,帮助更好地理解问题。
- 点击 “Submit new issue”:填写完成后,点击 Submit new issue 提交。
4.2 使用标签、分配人员和项目板管理 Issue
管理 Issue 时,使用标签、分配人员和项目板可以帮助团队有效地组织和跟踪问题的进展。
-
标签 (Labels):
- 标签是 Issue 的分类标识,可以让你快速识别问题的类型或优先级。例如:
- bug:表示一个错误或问题。
- enhancement:表示一个功能增强或优化请求。
- help wanted:表示需要帮助的任务。
- good first issue:适合新手开发者的任务。
- 要为 Issue 添加标签,进入 Issue 页面,右侧会有一个标签管理区域,点击标签进行选择。
- 标签是 Issue 的分类标识,可以让你快速识别问题的类型或优先级。例如:
-
分配人员 (Assignees):
- 你可以将 Issue 分配给仓库中的某个成员,指派他们处理该任务。分配人员通常是负责修复 bug 或完成任务的开发者。
- 在 Issue 页面右侧的 Assignees 区域,点击 Assign yourself(分配给自己)或者选择其他团队成员进行分配。
-
项目板 (Projects):
- 使用项目板可以将 Issue 按照任务或功能区分到不同的项目板,以便更好地跟踪任务的进展。
- 点击 Issue 页面右侧的 Projects,选择一个已有的项目板或者创建一个新的项目板。
- 项目板通常按 To do、In progress、Done 等不同阶段分组,方便开发团队集中管理。
-
里程碑 (Milestones):
- 如果你有多个 Issue 与某个特定版本或阶段相关,可以为它们设置 里程碑。这有助于追踪项目进度并确保按时交付。
- 在 Issue 页面右侧的 Milestone 区域,选择或创建一个适合的里程碑。
4.3 关闭和跟进 Issue
随着项目的进展,Issue 会被解决或关闭。在 GitHub 中,有几种方法可以管理和跟进 Issue。
-
关闭 Issue:
- 当 Issue 被解决或任务完成时,点击 Issue 页面右上角的 Close issue 按钮来关闭它。关闭后的 Issue 不会再出现在待办事项中。
- 如果你解决了一个 bug 或实现了一个功能,也可以在提交 Pull Request 时自动关闭相关的 Issue(例如,在提交信息中添加
Fixes #issue_number
)。
-
重新打开 Issue:
- 如果问题没有得到解决,或者 Issue 被关闭后仍然存在问题,可以随时重新打开它。点击关闭的 Issue 页面中的 Reopen issue 按钮,将其恢复为活动状态。
-
评论和更新 Issue:
- 在 Issue 页面,你可以随时发表评论,更新任务进度或讨论问题。如果你是 Issue 的创建者或者已被分配的开发者,可以在评论区回复其他开发者的反馈或提出自己的意见。
- 评论是团队沟通的关键,保持良好的沟通可以加速问题解决。
-
关联其他 Issue 或 Pull Request:
- 如果一个 Issue 与另一个 Issue 或 Pull Request 相关联,你可以在描述或评论中使用
#issue_number
来引用它。这能帮助团队成员快速了解任务之间的关系。
- 如果一个 Issue 与另一个 Issue 或 Pull Request 相关联,你可以在描述或评论中使用
-
订阅 Issue 更新:
- 如果你希望跟进某个 Issue 的进展,可以选择订阅它。在 Issue 页面右上角点击 Subscribe,这样每当 Issue 状态发生变化时,你将收到通知。
通过这些功能,你可以有效管理 GitHub 上的 Issue,确保项目按时完成,协作更加顺畅。
5. 提交 Pull Request (PR)
Pull Request (PR) 是 GitHub 上协作开发的核心机制,它允许开发者将自己的代码更改提交给主仓库进行审查和合并。通过 PR,其他开发者能够查看你的更改,提供反馈,并确保代码质量符合项目要求。
5.1 什么是 Pull Request?
Pull Request 是一种请求,旨在让你所做的更改被其他开发者审查、讨论,并最终合并到主分支(通常是 main
或 master
)。PR 是团队协作的核心,通过它,开发者可以集中管理和审查代码,确保质量和功能符合需求。
简单来说,PR 就像是向团队提出的“代码合并申请”,提交后其他人可以审查、评论或提出修改建议,直到代码准备好被合并到主分支。
5.2 创建一个 Pull Request
创建一个 PR 的过程非常简单,它有助于将你的更改提到团队面前进行审查。以下是创建 PR 的步骤:
-
切换到你所做更改的分支:
- 在本地仓库中,你可能已经在一个新的分支上做了更改(通常从
main
或master
分支派生)。 - 确保你的更改已经推送到 GitHub 上的相应分支。
- 在本地仓库中,你可能已经在一个新的分支上做了更改(通常从
-
点击 “Compare & pull request”:
- 在 GitHub 上的仓库页面中,切换到你所做更改的分支。
- GitHub 通常会在你切换到分支后显示一个按钮:“Compare & pull request”。点击这个按钮进入 PR 创建页面。
-
填写标题和描述:
- 标题:简洁明了地说明 PR 的目的,例如 “Fix bug in login page” 或 “Add new feature for user profile”。
- 描述:详细说明你所做的更改,包括哪些文件被修改、修复了什么问题、添加了哪些新功能等。你可以提供额外的背景信息,帮助审查者理解你的更改。
- 在描述中,如果有需要,可以引用相关的 Issue(例如:
Closes #45
,意味着合并该 PR 后将自动关闭 Issue #45)。
-
点击 “Create pull request”:
- 完成标题和描述后,点击页面底部的 Create pull request 按钮提交你的 PR。
现在,你的更改已经作为一个 PR 提交给项目维护者进行审查了。
5.3 代码审查与合并 Pull Request
提交 PR 后,团队成员或项目维护者将会进行代码审查。他们会查看你的代码更改,提出建议或修复意见,并检查代码是否符合项目规范和质量要求。代码审查的过程通常包括以下几个步骤:
-
查看代码:
- 审查者会查看你提交的代码,检查其正确性、效率、可维护性等方面。
- 他们可能会检查你是否遵循了项目的编码规范,是否有冗余的代码或潜在的 bug。
-
提出反馈:
- 如果审查者发现问题,他们会在 PR 的评论区域提出反馈,可能是代码风格问题、逻辑错误,或者是一些优化建议。
- 你可以在评论中与审查者讨论解决方案,修改你的代码并更新 PR。
-
修复反馈问题:
- 如果审查者要求你修改代码,你可以在本地做出更改并推送到远程分支。GitHub 会自动将这些新更改添加到已有的 PR 中。
- 一旦修改完成,再次提交 PR,审查者会重新审查这些更改。
-
合并 PR:
- 当所有问题都解决且代码审查通过时,项目维护者会将 PR 合并到主分支中。通常会使用 Merge pull request 按钮。
- 合并操作后,PR 会关闭,并且更改会被应用到主分支。这个过程中,通常会执行 Merge commit 或 Squash and merge,取决于项目的 Git 流程。
5.4 使用 Draft PRs 和 变更请求
GitHub 提供了 Draft PRs 和 变更请求 (Change requests) 功能,使得代码审查和协作更加灵活。
-
Draft PRs:
- 如果你的代码还在进行中,或者你想要早期获取团队反馈,但尚未准备好正式合并,可以选择创建一个 Draft PR。Draft PR 是一种“草稿”状态,意味着代码审查人员不会立即合并该 PR。
- 创建时,你可以在 PR 页面中选择 Create draft pull request。这使得审查者可以提前看到代码并提供反馈,但该 PR 不会立即合并。
-
变更请求 (Change Requests):
- 当审查者对 PR 提出了修改建议并要求做出改动时,GitHub 会将该审查标记为“变更请求”。这意味着你需要对代码做出更改并推送到原来的分支。
- 你可以在 PR 页面右侧看到变更请求的具体内容。完成修改后,提交新的代码更改,审查者会重新查看。
使用 Draft PR 和变更请求功能,团队可以更早地开始讨论代码,更灵活地管理审查和合并流程。
6. 管理你的仓库
在 GitHub 上管理仓库的设置和权限非常重要,尤其是当你与团队合作时。通过设置,你可以自定义仓库的各项功能并确保数据的安全性。
-
仓库设置:
- 进入仓库页面,点击右上角的 Settings 标签,进入仓库的设置页面。这里你可以配置许多选项,比如:
- Repository name:修改仓库名称。
- Description:修改仓库的简短描述。
- Default branch:设置默认分支(通常为
main
或master
)。 - GitHub Pages:如果你的项目是网站,可以启用 GitHub Pages 部署功能。
- Webhooks:配置 Webhooks,用于在仓库发生事件(如推送、PR 合并)时触发外部应用程序或服务。
- 进入仓库页面,点击右上角的 Settings 标签,进入仓库的设置页面。这里你可以配置许多选项,比如:
-
权限管理:
- 协作者:你可以邀请其他开发者加入你的仓库,成为协作者,使他们能够访问和修改仓库内容。协作者可以拥有不同的权限等级:
- Read:只读权限,允许查看仓库的内容,但不能推送更改。
- Write:写权限,允许对仓库进行推送和修改。
- Admin:管理员权限,允许管理仓库的所有设置,包括添加或移除协作者、删除仓库等。
- 要邀请协作者,进入仓库的 Settings 页,选择 Manage access,然后点击 Invite a collaborator,输入他们的 GitHub 用户名并选择合适的权限。
- 协作者:你可以邀请其他开发者加入你的仓库,成为协作者,使他们能够访问和修改仓库内容。协作者可以拥有不同的权限等级:
-
分支保护:
- 通过仓库设置,你还可以启用 Branch protection rules,确保主分支(或其他重要分支)不会被直接推送或破坏。你可以设置强制代码审查,要求在合并 PR 前至少有一个审核者批准,或者禁止直接推送到保护的分支。
相关文章:
GitHub新手入门 - 从创建仓库到协作管理
GitHub新手入门 - 从创建仓库到协作管理 GitHub 是开发者的社交平台,同时也是代码托管的强大工具。无论是个人项目、开源协作,还是团队开发,GitHub 都能让你轻松管理代码、版本控制和团队协作。今天,我们将从基础开始,…...

作业25 深度搜索3
作业: #include <iostream> using namespace std; bool b[100][100]{0}; char map[100][100]{0}; int dx[4]{0,1,0,-1}; int dy[4]{1,0,-1,0}; int n,m; int sx,sy,ex,ey; int mink2147483647; void dfs(int,int,int); int main(){cin>>n>>m;for(…...
ubuntu20.04 colmap 安装2024.11最新
很多教程都很落后了,需要下载压缩包解压编译的很麻烦 现在就只需要apt install就可以了 apt更新 sudo apt update && sudo apt-get upgrade安装依赖 #安装依赖 sudo apt-get install git cmake ninja-build build-essential libboost-program-options-de…...

WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
WebRTC视频 01 - 视频采集整体架构 WebRTC视频 02 - 视频采集类 VideoCaptureModule [WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇](本文) WebRTC视频 04 - 视频采集类 VideoCaptureDS 中篇 WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇 一、前…...
python os.path.basename(获取路径中的文件名部分) 详解
os.path.basename 是 Python 的 os 模块中的一个函数,用于获取路径中的文件名部分。它会去掉路径中的目录部分,只返回最后的文件名或目录名。 以下是 os.path.basename 的详细解释和使用示例: 语法 os.path.basename(path) 参数 path&…...

《FreeRTOS任务基础知识以及任务创建相关函数》
目录 1.FreeRTOS多任务系统与传统单片机单任务系统的区别 2.FreeRTOS中的任务(Task)介绍 2.1 任务特性 2.2 FreeRTOS中的任务状态 2.3 FreeRTOS中的任务优先级 2.4 在任务函数中退出 2.5 任务控制块和任务堆栈 2.5.1 任务控制块 2.5.2 任务堆栈…...

036集——查询CAD图元属性字段信息:窗体显示(CAD—C#二次开发入门)
提取CAD图元所有属性字段,通过窗体显示,效果如下:(curve改为entity) 代码如下: public void 属性查询() {List<Curve> ents Z.db.SelectEntities<Curve>();if (ents is null ||ents.Cou…...

Swift从0开始学习 函数和闭包 day2
一、函数 1.1函数定义 使用 func 来声明一个函数,使用名字和参数来调用函数。使用 -> 来指定函数返回值的类型。 示例:拼接字符串 //有参数和返回值的函数 func append1(name : String, description : String) -> String {return "\(name)…...
内网、公网(外网)划分
内网、公网(外网)划分 声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其…...

【linux】centos7 换阿里云源
相关文章 【linux】CentOS 的软件源(Repository)学习-CSDN博客 查看yum配置文件 yum的配置文件通常位于/etc/yum.repos.d/目录下。你可以使用以下命令查看这些文件: ls /etc/yum.repos.d/ # 或者 ll /etc/yum.repos.d/备份当前的yum配置文…...

用OMS进行 OceanBase 租户间数据迁移的测评
基本概念 OceanBase迁移服务(,简称OMS),可以让用户在同构或异构 RDBMS 与OceanBase 数据库之间进行数据交互,支持数据的在线迁移,以及实时增量同步的复制功能。 OMS 提供了可视化的集中管控平台ÿ…...

【因果分析方法】MATLAB计算Liang-Kleeman信息流
【因果分析方法】MATLAB计算Liang-Kleeman信息流 1 Liang-Kleeman信息流2 MATLAB代码2.1 函数代码2.2 案例参考Liang-Kleeman 信息流(Liang-Kleeman Information Flow)是由 Liang 和 Kleeman 提出的基于信息论的因果分析方法。该方法用于量化变量之间的因果关系,通过计算信息…...

【Java基础知识系列】之Java类的初始化顺序
前言 类的初始化顺序 简单场景 代码示例 public class Person {private String name initName();private String initName() {System.out.println("【父类】初始化实例变量name");return "【父类】史蒂夫";}private int age;private static int staticVa…...

Swift 宏(Macro)入门趣谈(二)
概述 苹果在去年 WWDC 23 中就为 Swift 语言新增了“其利断金”的重要小伙伴 Swift 宏(Swift Macro)。为此,苹果特地用 2 段视频(入门和进阶)颇为隆重的介绍了它。 那么到底 Swift 宏是什么?有什么用&…...

vue elementui el-dropdown-item设置@click无效的解决方案
如图,直接在el-dropdown-item上面设置click,相应的method并没有被触发,查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…...
如何用re从第1排第2个位置中找到两个数字返回(0,1)
以下是使用 Python 的re模块从第1班第2个位置这样的字符串中提取出数字并返回类似(0, 1)这种形式的示例代码,假设数字都是一位数的情况(如果是多位数可以按照后续介绍稍作调整): import redef extract_numbers(text):numbers re.…...
vue中的keep-alive是什么,有哪些使用场景,使用了什么原理,缓存后如何更新数据
<keep-alive> 是 Vue.js 提供的一个内置组件,用于缓存动态组件,避免频繁的销毁和重建。这在某些场景下可以显著提升性能,特别是在组件频繁切换的情况下。以下是对 keep-alive 的详细讲解,包括它的定义、使用场景、原理分析、…...

LeetCode105.从前序与中序遍历构造二叉树
题目要求 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 提示: 1 < preorder.length < 3000inorder.length preorder.length-3000 < pr…...

LeetCode654.最大二叉树
LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C代码 📜题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子…...
C# 字段和属性
在 C# 中,字段和属性是定义类和结构体数据的两种方式。 字段用于直接存储数据,而属性提供了对字段的封装和访问控制。 1. 字段(Fields) 定义 字段是类或结构体中用于存储数据的变量。字段可以是任何数据类型,包括基…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...