Skip to content

How to Contribute

jamesnulliu edited this page Nov 21, 2023 · 13 revisions

How to Contribute

推荐阅读: How to Use Git & GitHub.

0. 操作手册

本节给出一个比较抽象的操作流程, 每个步骤和后文的小节号一一对应, 建议读者对照阅读.

以下步骤能够应对一般情况下的 contribute 流程, 具体内容需要根据不同项目的政策进行调整.

  1. 在 GitHub 上 fork 原储存库中的 main 分支成为一个属于你的拷贝储存库.
  2. 将你的拷贝储存库 clone 至本地储存库.
  3. 本地储存库创建一个新分支, 在新分支上开发; 开发完 commit 更改至创建的分支.
  4. 在 Github 上检查你的拷贝储存库是否需要同步原储存库的更新, 如果需要则进行同步.
  5. 如果上一步中你的拷贝储存库同步了原储存库的更新, 那么在本地储存库中切换到 main 分支 pull 拷贝储存库的更新; 如果上一步没有同步则可以跳过这一步.
  6. 本地储存库中切换到 main 分支, merge 第三步中创建的分支; merge 完成可以删除不需要的分支.
  7. 本地储存库中 main 分支下的新版本 push 到 拷贝储存库.
  8. 在 GitHub 上, 进入你的 拷贝储存库 的主页, 对 原储存库 提出 PR.

如果项目政策规定了只能对特定分支提出 PR, 那么在 fork 时取消勾选 Copy the main branch only (即 fork 所有分支); 接着从上面的第二步开始依次向后操作 (步骤中 main 分支全部替换成允许提出 PR 的特定分支).

1. Fork 储存库

Fork 的意义在于: 将他人的 GitHub 储存库 "拷贝" 一份成为你自己的 GitHub 储存库.

❗在本文中, 他人的 GitHub 储存库我们称为 (远程) 原储存库, 你 fork 来的属于你的 GitHub 储存库我们称为 (远程) 拷贝储存库.

你在拷贝储存库中可以随意更改, 都不会影响到属于他人的原储存库; 除非你向原储存库的某一个分支提出 Pull Request, 即要求他人接受你更改的版本.

❗在本文中, 我们将 Pull Request 称为 PR.


Figure 1. fork SHU-CS-Source-Share

以本项目为例, Fig.1 展示了如何将 SHU-CS-Source-Share fork 至你自己的储存库.

  1. 进入他人的储存库页面, 点击右上角的 fork 图标.
  2. 如果他人的储存库政策允许向 main 分支提出 PR, 则直接点击右下角 Create fork; 否则取消勾选箭头所指的 Copy the main branch only.
  3. 完成上一步后会跳转到一个属于你的储存库, 该储存库就是 SHU-CS-Source-Share 的拷贝.

2. Clone 拷贝储存库至本地

推荐阅读: Clone 远程储存库至本地.

复制 fork 来的属于你的拷贝储存库的 ssh (推荐) 或者 https 链接.

在本地的某个路径打开终端, 输入以下指令:

git clone <RepoAddress>

3. 在 dev 分支上开发

你可能还不知道 merge conflicts 是什么, 但是 merge conflicts 只能在本地被处理.

git branch dev

资料分享

分享资料分为两种情况(实际操作步骤有所差异)

情况一:想要分享资料实体(直接将资料实体合并提交到仓库)
规范:

若为全新资料:在成功Fork仓库后在“学习资料(非电子书)”文件夹的对应分类下创建一个新的文件夹,将要分享的资料分门别类地放到对应的地点,文件夹名称可以加上自己特殊的标记,但要求文件命名要能够直观的展现出资料的内容。

若是对现有资料的补充:可以在成功Fork仓库后直接将补充的资料添加到对应位置处

情况二:已有资料仓库或是博客地址(外链)
规范:在成功Fork仓库后打开README文件,在非本项目内资料板块下选择合适的分类(如果没有可以自行创建)将外链添加到分类下方,要求外链命名要能够直观的展现出资料的内容例如:2023年数据结构(1)心得笔记分享、2023年操作系统(1)实验(1-8章)报告分享等等。

注:若有资料在分享前请先做好脱敏工作,部分敏感资料例如社团内部资料以及排名等暂不接收,望谅解!

操作步骤:

具体如何提交PR可自行搜索网上教程

Step 1. Fork

Step 2. Clone

Step 3. Add + Commit + Push

Step 4. Pull Request