手把手教你如何参与开源项目的协作、贡献代码: 以PolarDB开源项目为例

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
PolarDB Agent Express,2核4GB
简介: 开源协作是一种社会进化的体现吗? 昨天体验了一下ChatGPT, 对这几个回答深有感触, 开源协作一定是未来会长期存在的, 更大规模化的人类协作模式. 所以我想写一点东西, 来帮助更多人参与开源协作.

背景

开源协作是一种社会进化的体现吗?

昨天体验了一下ChatGPT, 对这几个回答深有感触, 开源协作一定是未来会长期存在的, 更大规模化的人类协作模式. 所以我想写一点东西, 来帮助更多人参与开源协作.

1、三体的黑暗丛林法则是社会达尔文主义的体现吗

不是。三体的黑暗森林法则是一种民族和文化发展观,源于中国古老文化中著名的《三体》系列小说。其认为,世界上所有文明都在竞争中进化,只有最强者才能存活。而社会达尔文主义是一种倡导“演化后成长”的社会学理论,它认为,演化不是一种竞争,而是一种合作和协作,因此任何文明走向协作而不是竞争,都会获得更多的发展及成功。

2、请解释一下社会达尔文主义

社会达尔文主义是一种形而上学社会理论,它倡导“演化后成长”的理念,认为演化不是一种竞争,而是一种协作的智慧,个体应该以合作精神更多的关注大环境和社会需要,以满足自己的更多发挥和增长。它认为社会的发展应该综合考虑各方的利益,而不是仅仅考虑个人的利益。社会达尔文主义提出了一种协作的概念,认为任何文明走向协作而不是竞争,都会获得更多的发展及成功。

3、马尔萨斯陷阱是社会达尔文主义的延伸吗

是的,马尔萨斯陷阱是社会达尔文主义的延伸,它可以用来描述一种社会演化的过程,即一个社会会认为比竞争更重要的是合作,因此会相互促进,从而达到一种共赢的状态。比如,若某社区的人们都采取协作精神,那么社区将更加繁荣,而如果社区里面存在竞争,每个人争夺自己的利益,则会带来更多的紧张和冲突,更不利于社会发展。

4、请解释一下马尔萨斯陷阱

马尔萨斯陷阱是指当一个社会采取竞争策略而不是合作策略时,成员会受到损害,从而导致社会质量下降。这种概念是由社会学家和哲学家弗朗索瓦·马尔萨斯在上世纪20年代提出的,他提出,在一个社会,如果每个人都只关心自
己的利益,这将会导致整个社会陷入低效的、限制发展的困境中。

PolarDB的分支解释

https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

将来Polardb发布14版本, 则会新建2个分支:

  • polardb_14_devpolardb v14master分支 , 依旧类似postgresqlmaster分支.
  • polardb_14_stablepolardb v14stable分支 , 类似postgresqlREL_14_STABLE分支.

实际上polardb_11_devpostgresqlREL_11_STABLE分支的下游分支. polardb_14_devpostgresqlREL_14_STABLE分支的下游分支.

协作模式: 所有的开发者都将代码贡献到dev分支, PolarDB核心组会选择性的将dev的commit merge到stable稳定分支.

推荐的PolarDB贡献流程

第一次贡献:

  • fork -- 第一次
  • sync polardb_11_dev -- 每次贡献前, 在github官网, 你fork的polardb repo中进行操作. (或者使用openapi?)
  • checkout newbranch1 base on polardb_11_dev
  • modify -- 基于polardb的开发者规范进行代码修改
  • git add
  • git commit
  • git push
  • pull request -- 在github官网, pull newbranch1 to polardb 上游 polardb_11_dev
    • -- 如果合并未通过, 根据建议进行修改, 自己的仓库push后再次提交pull

新的贡献:

  • sync polardb_11_dev -- 每次贡献前, 在github官网, 你fork的polardb repo中进行操作. (或者使用openapi?)
  • checkout newbranch2 base on polardb_11_dev
  • modify -- 基于polardb的开发者规范进行代码修改
  • git add
  • git commit
  • git push
  • pull request -- 在github官网, pull newbranch2 to polardb 上游 polardb_11_dev
    • -- 如果合并未通过, 根据建议进行修改, 自己的仓库push后再次提交pull

FAQ:

1、为什么建议每次都先 checkout newbranch2 base on polardb_11_dev , 然后在newbranch2进行修改.
保证你的polardb_11_dev永远是干净的, 可以从上游同步最新变动.

如图:
image.png

2、为什么每次修改前都要先 sync polardb_11_dev 到最新状态?

如果你已经落后于上游, 上游如果对你将要修改的文件已经修改过, 你基于老的文件修改, 会出现冲突, 导致pull失败.

你之前给上游提交的修改会被合并到polardb_11_dev, 所以保持sync polardb_11_dev可以保证拿到你以及其他开发者对上游的最新贡献.

所有人都这么做, 则保证了上游polardb_11_dev分支永远是最新的开发分支.

实操演示: 贡献polardb文档

环境: macOS

1、假设你已经有github账号

并且已经签署CLA :
https://cla-assistant.io/ApsaraDB/PolarDB-for-PostgreSQL

注意cla签署后, 会比对commit log里面的email是否与已登记到你github里的email一致, 如果不一致则cla检测无法通过.

https://help.github.com/articles/why-are-my-commits-linked-to-the-wrong-user/#commits-are-not-linked-to-any-user

digoal zhou seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.

You have signed the CLA already but the status is still pending? Let us recheck it.

具体操作:

1.1、在github网站进行设置, 将email地址添加到github邮件里面.

1.2、同时, 修改本地的email信息, 每次提交会从 ~/.gitconfig 读取.

git config --global user.name "Your Name"   
git config --global user.email "youremail@yourdomain.com"   


IT-C02YW2EFLVDL:.git digoal$ git config --global user.name "digoal zhou"   
IT-C02YW2EFLVDL:.git digoal$ git config --global user.email "dege.zzz@alibaba-inc.com"   


IT-C02YW2EFLVDL:.git digoal$ cat ~/.gitconfig   
# This is Git's per-user configuration file.  
[user]  
# Please adapt and uncomment the following lines:  
    name = digoal zhou  
    email = dege.zzz@alibaba-inc.com  
[http]  
    postBuffer = 10485760000  
    lowSpeedLimit = 0  
    lowSpeedTime = 999999

如果你已经使用了未登记在github内的email进行了commit, 可以通过如下方法修改commit log, 改成已登记到你github里的email, 然后进行覆盖. 例如:

git commit --amend --author="digoal zhou <dege.zzz@alibaba-inc.com>"  
git push -f origin 20230130_01

2、假设你本地已经配置好了github ssh-key for git push

3、假设你已经登陆了github

4、fork PolarDB-for-PostgreSQL

打开github: https://github.com/ApsaraDB/PolarDB-for-PostgreSQL

点击 fork

  • 不要勾选: Copy the POLARDB_11_STABLE branch only

fork到我的github, 新的repo如下:

https://github.com/digoal/PolarDB-for-PostgreSQL

然后修改一下默认分支为POLARDB_11_DEV, 因为后面经常要跟上游sync这个分支. 同时也可以避免一些误操作.

5、clone到本地

git clone --depth 1 -b POLARDB_11_DEV git@github.com:digoal/PolarDB-for-PostgreSQL.git  

如下  

IT-C02YW2EFLVDL:~ digoal$ git clone --depth 1 -b POLARDB_11_DEV git@github.com:digoal/PolarDB-for-PostgreSQL.git  
Cloning into 'PolarDB-for-PostgreSQL'...  
Enter passphrase for key '/Users/digoal/.ssh/id_rsa':   
remote: Enumerating objects: 11564, done.  
remote: Counting objects: 100% (11564/11564), done.  
remote: Compressing objects: 100% (7895/7895), done.  
remote: Total 11564 (delta 3531), reused 9781 (delta 3404), pack-reused 0  
Receiving objects: 100% (11564/11564), 82.38 MiB | 6.91 MiB/s, done.  
Resolving deltas: 100% (3531/3531), done.  
Updating files: 100% (11024/11024), done.  

IT-C02YW2EFLVDL:~ digoal$ cd PolarDB-for-PostgreSQL/  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
* POLARDB_11_DEV

6、sync polardb_11_dev

在github网站操作, 点击Sync fork. https://github.com/digoal/PolarDB-for-PostgreSQL/tree/POLARDB_11_DEV

然后本地pull最新代码

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git pull origin POLARDB_11_DEV  
Enter passphrase for key '/Users/digoal/.ssh/id_rsa':   
From github.com:digoal/PolarDB-for-PostgreSQL  
 * branch            POLARDB_11_DEV -> FETCH_HEAD  
Already up to date.

7、checkout 到本地新分支, 在新分支上进行修改

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch 20230130_01  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
  20230130_01  
* POLARDB_11_DEV  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git checkout 20230130_01  
Switched to branch '20230130_01'

查看当前是否切换到新分支

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
* 20230130_01  
  POLARDB_11_DEV

8、以贡献polardb 文档为例:

详细参考:

https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/contributing/contributing-polardb-docs.html

8.1、先配置一下依赖环境 (配置一次就可以).

通过 curl 安装 Node 版本管理器 nvm。

cd ~  

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | sudo bash

由于我使用的是bash shell, 添加一下环境变量, 否则找不到nvm命令.

vi ~/.bash_profile  
# nvm add  
. $HOME/.profile  

. ~/.bash_profile  
IT-C02YW2EFLVDL:~ digoal$ command -v nvm  
nvm

如果 nvm 已经被成功安装,执行以下命令安装 Node 的 LTS 版本:

nvm install --lts

Node.js 安装完毕后,使用如下命令检查安装是否成功:

node -v  
npm -v  

如下  

IT-C02YW2EFLVDL:~ digoal$ node -v  
v18.13.0  
IT-C02YW2EFLVDL:~ digoal$ npm -v  
8.19.3

使用 npm 全局安装软件包管理器 yarn:

npm install -g yarn  
yarn -v  

如下  

IT-C02YW2EFLVDL:~ digoal$ yarn -v  
1.22.19

贡献文档, 需要安装一些依赖:

在 PolarDB for PostgreSQL 工程的根目录下运行以下命令,yarn 将会根据 package.json 安装所有依赖:

查看当前是否切换到新分支

IT-C02YW2EFLVDL:~ digoal$ cd PolarDB-for-PostgreSQL/  

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
* 20230130_01  
  POLARDB_11_DEV  


IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ yarn  


yarn install v1.22.19  
[1/4] 🔍  Resolving packages...  
[2/4] 🚚  Fetching packages...  
[3/4] 🔗  Linking dependencies...  
warning "@vuepress/plugin-docsearch > @docsearch/react@3.1.1" has unmet peer dependency "@types/react@>= 16.8.0 < 19.0.0".  
warning "@vuepress/plugin-docsearch > @docsearch/react@3.1.1" has unmet peer dependency "react@>= 16.8.0 < 19.0.0".  
warning "@vuepress/plugin-docsearch > @docsearch/react@3.1.1" has unmet peer dependency "react-dom@>= 16.8.0 < 19.0.0".  
warning "@vuepress/plugin-docsearch > @docsearch/react > @algolia/autocomplete-preset-algolia@1.7.1" has unmet peer dependency "@algolia/client-search@^4.9.1".  
warning "vuepress > vuepress-vite@2.0.0-beta.49" has unmet peer dependency "@vuepress/client@^2.0.0-beta.42".  
warning "vuepress > vuepress-vite@2.0.0-beta.49" has unmet peer dependency "vue@^3.2.36".  
[4/4] 🔨  Building fresh packages...  
✨  Done in 35.31s.

运行文档开发服务器 (如果你想退出, ctrl+c 可以退出)

在 PolarDB for PostgreSQL 工程的根目录下运行以下命令:

yarn docs:dev  


IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ yarn docs:dev  
yarn run v1.22.19  
$ vuepress dev docs  
info Initializing VuePress and preparing data...  

  vite v2.9.14 dev server running at:  

  > Local:    http://localhost:8080/PolarDB-for-PostgreSQL/  
  > Network:  http://30.221.96.221:8080/PolarDB-for-PostgreSQL/  
4:35:17 PM [vite] ✨ optimized dependencies changed. reloading

文档开发服务器将运行于 http://localhost:8080/PolarDB-for-PostgreSQL/ ,打开浏览器即可访问。对 Markdown 文件作出修改后,可以在网页上实时查看变化。

8.2、修改或新增贡献内容

查看当前是否切换到新分支

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
* 20230130_01  
  POLARDB_11_DEV

进入文档目录, 并新增最佳实践目录, 新增postgis部署文档.

IT-C02YW2EFLVDL:zh digoal$ pwd  
/Users/digoal/PolarDB-for-PostgreSQL/docs/zh  

IT-C02YW2EFLVDL:zh digoal$ mkdir practice  

cd practice

vi postgis_deploy.md

8.3、格式化文档

修改文档后,使用 Prettier 工具对 Markdown 文档进行格式化:
直接在源码根目录运行:npx prettier --write docs/

IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ pwd  
/Users/digoal/PolarDB-for-PostgreSQL  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git branch  
* 20230130_01  
  POLARDB_11_DEV  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ npx prettier --write docs/  
docs/.vuepress/.cache/deps/_metadata.json 64ms  
docs/.vuepress/.cache/deps/@vue_devtools-api.js 15ms  
...  
docs/zh/theory/buffer-management.md 54ms  
docs/zh/theory/ddl-synchronization.md 35ms  
docs/zh/theory/logindex.md 80ms  
docs/zh/theory/polar-sequence-tech.md 79ms

8.4、

新的文档写好后,需要在文档配置中配置路由使其在导航栏和侧边栏中显示(可参考其他已有文档)

/Users/digoal/PolarDB-for-PostgreSQL/docs/.vuepress/configs/navbar

增加导航(因为没有英文的版本, 所以只需要修改zh.ts)

  {  
    text: "最佳实践",  
    link: "/zh/practice/",  
    children: [  
      {  
        text: "插件应用",  
        children: [  
          "/zh/practice/postgis_deploy.html",  
        ],  
      },  
    ],  
  },

在浏览器中观察修改是否正常:

http://localhost:8080/PolarDB-for-PostgreSQL/zh/

正常的话就继续下一步

8.5、提交到fork的项目中

IT-C02YW2EFLVDL:navbar digoal$ cd ~/PolarDB-for-PostgreSQL  
IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$   


IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git add .  


IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git commit -m 'add a zh document: deploy postgis on polardb'  


IT-C02YW2EFLVDL:PolarDB-for-PostgreSQL digoal$ git push origin 20230130_01  
Enter passphrase for key '/Users/digoal/.ssh/id_rsa':   
Enumerating objects: 12, done.  
Counting objects: 100% (12/12), done.  
Delta compression using up to 8 threads  
Compressing objects: 100% (7/7), done.  
Writing objects: 100% (7/7), 2.26 KiB | 2.26 MiB/s, done.  
Total 7 (delta 5), reused 0 (delta 0), pack-reused 0  
remote: Resolving deltas: 100% (5/5), completed with 5 local objects.  
remote:   
remote: Create a pull request for '20230130_01' on GitHub by visiting:  
remote:      https://github.com/digoal/PolarDB-for-PostgreSQL/pull/new/20230130_01  
remote:   
To github.com:digoal/PolarDB-for-PostgreSQL.git  
 * [new branch]      20230130_01 -> 20230130_01

8.6、发起pull request

打开github

https://github.com/digoal/PolarDB-for-PostgreSQL/pulls

点击 new pull requests

上游选中POLARDB_11_DEV分支, 下游(你的repo)选中刚才修改的20230130_01分支.

comment里面填写和本次提交相关的内容.

在github中可以看到pull request的进展

https://github.com/ApsaraDB/PolarDB-for-PostgreSQL/pull/333

如果合并未通过, 根据建议进行修改, 自己的仓库push后再次提交pull

8.7、未来你的临时分支会越来越多, 可以使用以下方法删除一些临时分支:

  • 1、删除本地分支,使用 git branch --delete 20230130_01 来执行;
  • 2、删除远程分支,使用 git push origin --delete 20230130_01 指令;

参考

https://www.cnblogs.com/jinqi520/p/10384225.html

https://zhuanlan.zhihu.com/p/347918608

https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/contributing/contributing-polardb-kernel.html

https://apsaradb.github.io/PolarDB-for-PostgreSQL/zh/contributing/contributing-polardb-docs.html

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
7月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2开源发布,重点完善生态能力:新增客户端驱动、开源polardbx-proxy组件,支持读写分离与高可用;强化DDL变更、扩缩容等运维能力,并兼容MySQL主备复制及MCP AI生态。
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
7月前
|
SQL 关系型数据库 MySQL
开源新发布|PolarDB-X v2.4.2开源生态适配升级
PolarDB-X v2.4.2发布,新增开源Proxy组件与客户端驱动,支持读写分离、无感高可用切换及DDL在线变更,兼容MySQL生态,提升千亿级大表运维稳定性。
1897 24
开源新发布|PolarDB-X v2.4.2开源生态适配升级
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
1080 2
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
914 3
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
1007 1
|
存储 容灾 关系型数据库
PolarDB开源数据库进阶课11 激活容灾(Standby)节点
本文介绍了如何激活PolarDB容灾(Standby)节点,实验环境依赖于Docker容器中用loop设备模拟共享存储。通过`pg_ctl promote`命令可以将Standby节点提升为主节点,使其能够接收读写请求。激活后,原Standby节点不能再成为PolarDB集群的Standby节点。建议删除对应的复制槽位以避免WAL文件堆积。相关操作和配置请参考系列文章及视频教程。
330 1
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
387 0
|
9月前
|
人工智能 关系型数据库 MySQL
开源PolarDB-X:单节点误删除binlog恢复
本文由邵亚鹏撰写,分享了在使用开源PolarDB-X过程中,因误删binlog导致数据库服务无法启动的问题及恢复过程。作者结合实践经验,详细介绍了在无备份情况下如何通过单节点恢复机制重启数据库,并提出了避免类似问题的几点建议,包括采用高可用部署、定期备份及升级至最新版本等。
|
供应链 关系型数据库 分布式数据库
2025开源之夏火热报名|一起来设计PolarDB Dashboard
2025开源之夏正在火热报名中,PolarDB邀请全球学子参与云原生与Web开发的前沿项目。活动由中国科学院软件研究所发起,旨在鼓励高校学生通过实际开发维护开源软件,培养优秀开发者,推动开源生态发展。PolarDB项目聚焦设计与开发PolarDB-X Dashboard,要求掌握K8S Client-go和Web开发技术。参与者将根据项目难度获得税前8000至12000元人民币报酬,并获取结项证书。每位学生仅可申请一个项目,详情见官网。
2025开源之夏火热报名|一起来设计PolarDB Dashboard
|
SQL 关系型数据库 分布式数据库
PolarDB开源数据库入门教程
PolarDB是阿里云推出的云原生数据库,基于PostgreSQL、MySQL和Oracle引擎构建,具备高性能、高扩展性和高可用性。其开源版采用计算与存储分离架构,支持快速弹性扩展和100%兼容PostgreSQL/MySQL。本文介绍了PolarDB的安装方法(Docker部署或源码编译)、基本使用(连接数据库、创建表等)及高级特性(计算节点扩展、存储自动扩容、并行查询等)。同时提供了性能优化建议和监控维护方法,帮助用户在生产环境中高效使用PolarDB。
3309 21

相关产品

  • 云原生数据库 PolarDB