给github的开源项目贡献代码
找到开源项目
创建fork分支
本地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.git
是GPDB
的官方源仓库地址,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到个人远程仓库
发起Pull Request
在GitHub
个人仓库页面点击Pull Request
→New pull request
:
然后会自动跳转到源仓库的页面,点击Create pull request
:
然后按要求填写一下信息:
- 目标仓库及分支(即我们要往哪个仓库的哪个分支提交PR)。
- 个人仓库和分支(我们的修订在哪个仓库的哪个分支)。
- 按照开源项目要求填写各种描述信息及其它信息。
填写完成后,点击Create pull request
按钮:
这样我们就提交了一个PR了,接下来需要等待开源社区的后续操作。
需要注意的是,围绕这个PR,可能还需要签署开源协议、代码review、讨论、修订、测试等一系列步骤。此处不再赘述。
打赏作者以资鼓励: