Github工作流

ops/2024/11/26 1:15:12/

GitHub 工作流 是一种专门为 GitHub 上的代码协作和版本控制而设计的工作流,它强调通过 **拉取请求(Pull Request,PR)** 来管理代码的合并和审查。GitHub 工作流通常涉及到使用 **分支** 来进行功能开发和修复,并通过 **Pull Request** 进行代码审查和合并。GitHub 工作流的核心步骤:

1. Fork 和 Clone 仓库
   - 对于开源项目或外部贡献者,通常是先 **fork** 原始仓库,然后将它克隆到本地。
   - 通过 `fork`,每个开发者可以在自己的副本上进行修改,而不直接影响到原始仓库。

2. 创建功能分支
   - 开发者从 `main` 或 `master` 分支上拉取新的分支进行功能开发。创建分支的目的是使开发工作与其他功能开发或主分支的工作隔离开。
   - **命名规范**:可以为功能分支命名,比如 `feature/new-feature`、`bugfix/fix-issue`,这样便于标识该分支的目的。

3. **开发和提交代码
   - 在功能分支上进行开发,完成某个功能或修复某个 bug 后,将更改 **提交(commit)** 到本地分支。
   - 每次提交时要写清楚简洁的提交信息,说明做了哪些更改,便于后期追踪。

4. 推送代码到远程仓库
   - 将本地的功能分支推送到 GitHub 上自己的仓库中。

5. 创建 Pull Request
   - 提交完本地更改并推送到远程仓库后,开发者可以在 GitHub 上向原始仓库提交 **Pull Request**。
   - **Pull Request(PR)** 是开发者请求将自己的功能分支合并到主仓库的 `main` 或 `master` 分支。
   - 在创建 PR 时,可以选择原始仓库的 `main` 分支作为目标分支,并向该分支提议合并开发者的功能分支。

6. 代码审查(Code Review)
   - 其他团队成员或者维护者会查看 PR 中的代码更改,进行 代码审查。
   - 审查过程中,审查者可能会提出修改意见,要求开发者修正代码中的问题,或者优化实现方式。

7. 修改和更新 PR
   - 如果在代码审查过程中发现问题,开发者需要修改代码并重新提交到功能分支。
   - 更新后的提交会自动反映到 Pull Request 中,审查者可以再次检查。

8. 合并 Pull Request
   - 一旦代码审查通过,PR 被批准,就可以将功能分支合并到 `main` 或 `master` 分支。
   - 合并时,通常有两种方式:
     - **Merge**:直接合并,保留所有的提交历史。
     - **Squash and Merge**:将所有提交合并成一个提交,简化提交历史。
     - **Rebase and Merge**:先将功能分支的提交变基到 `main` 分支之上,再进行合并。

9. 删除功能分支
   - 一旦功能分支被合并并完成了开发,可以删除该分支(无论是在本地还是 GitHub 上),保持分支管理的干净。

GitHub 工作流的详细流程示例

假设你是一个开发者,你想为一个开源项目提交一个新的功能或修复一个 bug。下面是一个典型的 GitHub 工作流步骤:

1. **Fork 仓库**

首先,点击 GitHub 上原始仓库的 **Fork** 按钮,将仓库复制到你自己的 GitHub 账户中。

2. **Clone 到本地**

从你自己的 GitHub 账户中将仓库克隆到本地,使用以下命令:
```bash
git clone https://github.com/your-username/repo-name.git
```

3. **创建一个新的功能分支**

进入本地仓库并创建一个新的分支,用于开发新功能或修复 bug:
```bash
cd repo-name
git checkout -b feature/new-feature
```

 4. **进行开发并提交更改**

在新分支上进行开发,完成后进行提交:
```bash
git add .
git commit -m "Add new feature"
```

5. **推送到远程仓库**

将本地分支推送到你自己的 GitHub 仓库:
```bash
git push origin feature/new-feature
```

6. **创建 Pull Request**

- 登录到 GitHub,进入你的仓库页面,切换到你的分支 `feature/new-feature`。
- 点击 **New Pull Request** 按钮,选择目标仓库的 `main` 或 `master` 分支作为合并目标,创建 PR。
- 在 PR 中添加标题和描述,简要说明功能或修复的内容。

7. **代码审查(Code Review)**

PR 创建后,其他开发者会对代码进行审查。如果有问题,审查者会要求你修改代码并推送新的更改到功能分支。

8. **修改代码并更新 PR**

如果需要修改代码,可以在本地进行修改,提交并推送更新:
```bash
git add .
git commit -m "Fix bug in new feature"
git push origin feature/new-feature
```
更新会自动反映在 PR 中,审查者可以再次检查。

9. **合并 Pull Request**

一旦代码审查通过,PR 被批准,就可以合并到主分支。可以选择通过 **Merge** 或 **Squash and Merge** 来合并代码。

#### 10. **删除功能分支**

合并完成后,可以删除远程和本地的功能分支:
```bash
git branch -d feature/new-feature  # 删除本地分支
git push origin --delete feature/new-feature  # 删除远程分支
```

GitHub 工作流的优缺点

优点:

1. **代码审查**:通过 Pull Request,团队成员可以对代码进行审查,确保代码质量。
2. **分支管理**:每个功能开发或 bug 修复都在独立的分支上进行,避免了直接修改主分支。
3. **版本管理**:GitHub 提供了版本控制和可视化的历史记录,使得开发过程可追溯。
4. **团队协作**:GitHub 工作流适用于多人协作,可以清晰地管理每个人的任务和提交。

缺点:

1. **操作较多**:相比于简单的提交推送,GitHub 工作流涉及更多的操作步骤(如 PR 和代码审查)。
2. **对新手要求较高**:如果你刚接触 GitHub 或者 Git,工作流可能需要一些时间来适应。

小结

GitHub 工作流是一个高效的协作流程,特别适用于开源项目和团队开发。通过使用分支、Pull Request 和代码审查,可以确保每个功能的代码质量,并促进团队成员之间的沟通和协作。尽管在某些情况下操作流程可能稍显繁琐,但它的优点远远超过缺点,尤其是在多人协作开发中,能够大大提高代码的可靠性和可维护性。


http://www.ppmy.cn/ops/136719.html

相关文章

Linux---ps命令

​​​​​​Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名,运行此进程的用户名。PID: 进程ID(Process ID),每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…

SpringBoot 集成 html2Pdf

一、概述&#xff1a; 1. springboot如何生成pdf&#xff0c;接口可以预览可以下载 2. vue下载通过bold如何下载 3. 一些细节&#xff1a;页脚、页眉、水印、每一页得样式添加 二、直接上代码【主要是一个记录下次开发更快】 模板位置 1. 导入pom包 <dependency><g…

Java技术分享

剖析equals方法 1、对于Object来说&#xff0c;其equals()方法底层实现就是""&#xff0c;都是比较对象的引用是否相等&#xff0c;下为JDK源码。 Object c 1; Object d 1; boolean equals c.equals(d);public boolean equals(Object obj) {return (this obj);…

贪心算法(2)

目录 K次取反后最大化的数组和 题解&#xff1a; 代码&#xff1a; 按身高排序&#xff08;田忌赛马的预备&#xff09; 题解&#xff1a; 代码&#xff1a; 方法一&#xff1a; 方法二&#xff1a; 优势洗牌&#xff08;田忌赛马&#xff09; 题解&#xff1a; 代…

debian下查看端口号命令

在 Debian 操作系统下,你可以使用以下命令来查看正在使用的端口号: 使用 netstat​:你可以使用 ​​netstat​​ 命令结合 ​​grep​​ 来查看特定的端口或协议。需要先安装 ​​net-tools​​,因为在一些现代系统上它可能默认未安装。sudo apt update sudo apt install n…

Three.js 相机控制器Controls

在 3D 场景中&#xff0c;摄像机的控制尤为重要&#xff0c;因为它决定了用户如何观察和与场景互动。Three.js 提供了多种相机控制器&#xff0c;最常用的有 OrbitControls、TrackballControls、FlyControls 和 FirstPersonControls。OrbitControls 适合用于查看和检查 3D 模型…

对元素为 pair 的数组的各元素进行排序的方法

【知识点】 ● 按结构体某一字段对结构体数组进行排序https://blog.csdn.net/hnjzsyjyj/article/details/120184972 据此知识点&#xff0c;则可构建 pair 元素数组的自定义排序代码如下所示。 typedef pair<int,int> PII;int up(PII u,PII v) { //ascending by firstif…

小R的随机播放顺序

问题描述 小R有一个特殊的随机播放规则。他首先播放歌单中的第一首歌&#xff0c;播放后将其从歌单中移除。如果歌单中还有歌曲&#xff0c;则会将当前第一首歌移到最后一首。这个过程会一直重复&#xff0c;直到歌单中没有任何歌曲。 例如&#xff0c;给定歌单 [5, 3, 2, 1,…