前言

由于近期主包看中了一个项目,所以搞了一些 svg 作为贡献提了上去,发现很多人想做贡献但是不会)


前提

贴一下 Git 基础配置

1
2
3
4
5
6
7
# 配置用户名和邮箱
git config --global user.name "您的用户名"
git config --global user.email "您的邮箱@example.com"

# 配置SSH密钥(推荐)
ssh-keygen -t ed25519 -C "您的邮箱@example.com"
# 将生成的公钥添加到GitHub账号设置中

你得找好项目,评估一下项目现在处于什么水平,然后去做什么样的贡献。

通过 GitHub 的starsforksissues活跃度和最近更新时间筛选,优先选择近 3 个月有提交的项目。要不然你的 PR 很有可能就会放置很久。

练习提交第一个PR,这对于开源新手来说会是一个很好的开始,GitHub 官方也知道这件事,一般新手可从good first issue标签的任务入手(许多项目会用该标签标记适合新手的任务)。

练习仓地址:https://github.com/TinaSprunt/How-to-contribute-code-to-the-open-source-community

在练习仓库可以轻松的提交任何东西,不必担心产生错误,这只是一个练习git的流程。无论提交啥反正我都会通过的。

一般在进行贡献之前,可以看看项目是否有这种文档,如果有,按照规范去做可以避免很多PR被拒绝的情况

  • CONTRIBUTING.md: 贡献指南和规范

  • CODE_OF_CONDUCT.md: 行为准则

fork 社区仓库

打开你想参与贡献的社区的仓库的 github 页面,并且 fork(复刻) 这个仓库到你的 GitHub 账号

image-20250603200720297

打开你自己的 github 页面,此时应该会多一个仓与你刚 fork 的仓库同名的复刻仓库

同步上游仓库

首先先把 fork 的仓库克隆到本地,在这个本地仓库进行修改

添加的上游仓库名叫 upstream 开头的

1
2
3
4
5
6
7
# 克隆个人仓库到本地
git clone https://github.com/你的用户名/项目名.git
cd 项目名
# 添加上游仓库(原项目地址)
git remote add upstream https://github.com/原项目作者/项目名.git
# 查看远程仓库
git remote -v

如果你的项目如果是已经 fork 了一段时间的,官方可能已经进行了很多修改,与你 fork 下来的时候不一样了,就需要 fetch upstream 查看官方更新,点击 fetch and merge 按钮进行同步

或者拉取上游仓库文件,进行同步

1
git fetch upstream

或者

1
2
3
4
# 1. 同步最新代码
git checkout main
git pull upstream main
git push origin main

创建修改分支

基于maindevelop分支创建新分支,注意部分仓库这里是需要有命名规范的:

1
2
3
4
5
6
# 拉取上游最新代码
git fetch upstream
# 2. 创建新分支
git checkout -b feature/您的功能名称
# 或
git checkout -b fix/修复的bug名称

之后进行开发需要注意

  • 遵循项目的代码风格
  • 编写清晰的代码注释
  • 添加必要的测试
  • 确保所有测试通过

提交更改

规范提交信息,遵循Header: Body格式:

1
2
3
4
5
6
7
8
9
10
11
# 1. 查看更改
git status
git diff

# 2. 添加更改到暂存区
git add .
# 或选择性添加
git add 文件名

# 3. 提交更改
git commit -m "类型: 简洁描述
  • Header 类型说明
    • fix:修复 bug
    • feat:新增功能
    • docs:文档更新
    • refactor:代码重构
    • test:测试用例添加

推送分支并创建 PR

推送到个人仓库

1
2
# 推送分支到您的Fork
git push origin feature/您的功能名称

在 GitHub 上进入你的仓库,点击 Compare & pull request按钮,选择正确的目标分支(通常是main或master),填写 PR 模板:

  • 标题:简明描述变更(如Fix NPE in login interface
  • 正文:说明变更原因、影响范围、测试结果
  • 关联 Issue:如果修复某个 Issue,添加Closes #123
img

之后就是等待上游仓库的所有者合并了

img

如果长时间无响应,礼貌提醒维护者(如Hi, just checking if there's any update on this PR

处理修改请求

上游仓库的所有者可能提出修改建议,需要你处理,这时候需要更改

1
2
3
4
5
6
7
8
9
10
11
# 1. 在原分支上进行修改
git checkout feature/您的功能名称

# 2. 进行必要的修改

# 3. 提交修改
git add .
git commit -m "根据审查反馈进行修改"

# 4. 推送更新
git push origin feature/您的功能名称

如果PR 与上游代码冲突,需要合并冲突

1
2
3
4
5
6
7
8
9
# 拉取上游最新代码
git fetch upstream
# 切换到本地分支
git checkout feature/修复登录接口
# 合并上游main分支
git merge upstream/main
# 解决冲突后提交
git commit -am "fix: 解决合并冲突"
git push origin feature/修复登录接口

维护者合并 PR 后,同步到本地:

1
2
3
4
5
git checkout main
git fetch upstream
git merge upstream/main
# 删除本地已合并分支
git branch -d feature/修复登录接口