# 找到开源项目 找到开源项目地址(我们称之为”源仓库“),这里以`GPDB`为例: ![img](../../../ff_internal_upload/img/2023/2023-01-10_085955.PNG) # 创建fork分支 按照页面提示填写fork分支的名称和描述信息: ![img](../../../ff_internal_upload/img/2023/2023-01-10_090306.PNG) 点击“Create fork”就会在自己的名下创建一个项目仓库: ![img](../../../ff_internal_upload/img/2023/2023-01-10_090637.PNG) # 本地clone仓库 这里假设已经在`GitHub`配置了本地设备的`SSH keys`。 ```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“是我们的提交。 ```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)`前,需要和源仓库进行合并并解决冲突。 我们在本地执行以下操作: ## 将源仓库添加到本地 ```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源仓库 ```bash [yz@bogon gpdb]$ git fetch gpdb_origin remote: Enumerating objects: 69940, done. remote: Counting objects: 100% (28202/28202), done. …… ``` ## rebase到源仓库的目标分支 ```bash [yz@bogon gpdb]$ git rebase gpdb_origin/main ``` rebase到源仓库的目标分支(后面我们将要提交到源仓库的具体分支)。这一步可能会产生冲突,有冲突的话需要手工解决。 ## 强制push到个人远程仓库 ```bash [yz@bogon gpdb]$ git push -f ``` 现在可以去GitHub页面确认一下我们的提交: ![img](../../../ff_internal_upload/img/2023/2023-01-11_110344.png) # 发起Pull Request 在`GitHub`个人仓库页面点击`Pull Request`->`New pull request`: ![img](../../../ff_internal_upload/img/2023/2023-01-11_111223.png) 然后会自动跳转到源仓库的页面,点击`Create pull request`: ![img](../../../ff_internal_upload/img/2023/2023-01-11_111620.png) 然后按要求填写一下信息: 1. 目标仓库及分支(即我们要往哪个仓库的哪个分支提交PR)。 2. 个人仓库和分支(我们的修订在哪个仓库的哪个分支)。 3. 按照开源项目要求填写各种描述信息及其它信息。 填写完成后,点击`Create pull request`按钮: ![img](../../../ff_internal_upload/img/2023/2023-01-11_111930.png) 这样我们就提交了一个PR了,接下来需要等待开源社区的后续操作。 ![img](../../../ff_internal_upload/img/2023/2023-01-11_113324.png) 需要注意的是,围绕这个PR,可能还需要签署开源协议、代码review、讨论、修订、测试等一系列步骤。此处不再赘述。