FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
给github的开源项目贡献代码

找到开源项目

找到开源项目地址(我们称之为”源仓库“),这里以GPDB为例:

img

创建fork分支

按照页面提示填写fork分支的名称和描述信息:

img

点击“Create fork”就会在自己的名下创建一个项目仓库:

img

本地clone仓库

这里假设已经在GitHub配置了本地设备的SSH keys

snippet.bash
[yz@bogon open]$ git clone git@github.com:fairyfar/gpdb.git
……
[yz@bogon open]$ cd gpdb/
[yz@bogon gpdb]$ git submodule update --init	# 没有子模块的话,不需要执行此命令。
……

在个人仓库上修改

在自己的仓库上修改,用git正常操作即可,此处不再赘述。

以下假设我们在个人仓库上已经提交了修改,其中”09c285f46a“是我们的提交。

snippet.bash
[yz@bogon gpdb]$ git remote -v
origin  git@github.com:fairyfar/gpdb.git (fetch)
origin  git@github.com:fairyfar/gpdb.git (push)
 
[yz@bogon gpdb]$ git log --oneline
09c285f46a (HEAD -> main, origin/main, origin/HEAD) Fixed Resource management DDL report "WARNING: unrecognized node type" when log_statement='ddl'.
0b121366e0 Update README of Create Production Pipeline
aadf70193d Switch platform to rocky8 for pr_pipeline
……

与源仓库merge

从源仓库fork后,在修改过程中,源仓库也在变更,在向源仓库发起Pull Request(PR)前,需要和源仓库进行合并并解决冲突。

我们在本地执行以下操作:

将源仓库添加到本地

snippet.bash
# 添加远程仓库:
[yz@bogon gpdb]$ git remote add gpdb_origin git@github.com:greenplum-db/gpdb.git
[yz@bogon gpdb]$ git remote -v
gpdb_origin     git@github.com:greenplum-db/gpdb.git (fetch)
gpdb_origin     git@github.com:greenplum-db/gpdb.git (push)
origin  git@github.com:fairyfar/gpdb.git (fetch)
origin  git@github.com:fairyfar/gpdb.git (push)

其中git@github.com:greenplum-db/gpdb.gitGPDB的官方源仓库地址,gpdb_origin是我们在本地起的一个名字。这样除了origin外,我们又添加了gpdb_origin

fetch源仓库

snippet.bash
[yz@bogon gpdb]$ git fetch gpdb_origin
remote: Enumerating objects: 69940, done.
remote: Counting objects: 100% (28202/28202), done.
……

rebase到源仓库的目标分支

snippet.bash
[yz@bogon gpdb]$ git rebase gpdb_origin/main

rebase到源仓库的目标分支(后面我们将要提交到源仓库的具体分支)。这一步可能会产生冲突,有冲突的话需要手工解决。

强制push到个人远程仓库

snippet.bash
[yz@bogon gpdb]$ git push -f

现在可以去GitHub页面确认一下我们的提交:

img

发起Pull Request

GitHub个人仓库页面点击Pull RequestNew pull request

img

然后会自动跳转到源仓库的页面,点击Create pull request

img

然后按要求填写一下信息:

  1. 目标仓库及分支(即我们要往哪个仓库的哪个分支提交PR)。
  2. 个人仓库和分支(我们的修订在哪个仓库的哪个分支)。
  3. 按照开源项目要求填写各种描述信息及其它信息。

填写完成后,点击Create pull request按钮:

img

这样我们就提交了一个PR了,接下来需要等待开源社区的后续操作。

img

需要注意的是,围绕这个PR,可能还需要签署开源协议、代码review、讨论、修订、测试等一系列步骤。此处不再赘述。



打赏作者以资鼓励: