如何给开源项目贡献自己的代码?这里以一次真实的给阿里巴巴的分布式事务框架seata提PR为例。
1.自己的项目拉取到本地
首先fork目标项目,这里是阿里的seata,fork到自己的仓库后,将项目拉取到本地。
$ git clone git@github.com:lightClouds917/seata.git
Cloning into 'seata'...
remote: Enumerating objects: 55, done.
remote: Counting objects: 100% (55/55), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 14692 (delta 12), reused 30 (delta 4), pack-reused 14637
Receiving objects: 100% (14692/14692), 2.65 MiB | 1.52 MiB/s, done.
Resolving deltas: 100% (6070/6070), done.
Checking connectivity... done.
Checking out files: 100% (960/960), done.
这里需要注意,设置自己的账号和邮箱!
git config user.name "IT云清"
git config user.email "118xxxxxx@qq.com"
2.关联上游项目
这里的upstream,名称自己定义,为了通俗易懂,建议也以此命名。
G:\mylearn\seata>git remote add upstream git@github.com:seata/seata.git
G:\mylearn\seata>git remote -v
//本地地址
origin git@github.com:lightClouds917/seata.git (fetch)
origin git@github.com:lightClouds917/seata.git (push)
//上游地址
upstream git@github.com:seata/seata.git (fetch)
upstream git@github.com:seata/seata.git (push)
(移除上游分支命令:git remote rm upstream)
3.同步上游代码
防止你操作的过程中,上游有人提交变更了代码,我们再次同步下上游最新的代码。
G:\mylearn\seata>git branch
* develop
G:\mylearn\seata>git pull upstream develop
From github.com:seata/seata
* branch develop -> FETCH_HEAD
* [new branch] develop -> upstream/develop
Already up-to-date.
4.提交本地修改
本地代码修改后,就该提交了。
G:\mylearn\seata>git add .
G:\mylearn\seata>git status
On branch develop
Your branch is up-to-date with 'origin/develop'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: core/src/main/java/io/seata/core/rpc/netty/NettyClientChannelManager.java
G:\mylearn\seata>git commit -am "NettyClientChannelManager#getExistAliveChannel() check null channel"
[develop 98ea0d4] NettyClientChannelManager#getExistAliveChannel() check null channel
1 file changed, 1 insertion(+), 1 deletion(-)
G:\mylearn\seata>git push
Counting objects: 12, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (12/12), 894 bytes | 0 bytes/s, done.
Total 12 (delta 6), reused 0 (delta 0)
remote: Resolving deltas: 100% (6/6), completed with 6 local objects.
To github.com:lightClouds917/seata.git
df7772a..98ea0d4 develop -> develop
G:\mylearn\seata>
5.提PR
![在这里插入图片描述 给开源项目贡献代码_github](//dev-img.mos.moduyun.com/20231024/22efd7d1-7b1b-4db0-a00e-9299e452a107.png)
这里可以看红框这里,就是我们刚提交到自己仓库的代码,上方有一个new pull request.点击这个按钮。
![在这里插入图片描述 给开源项目贡献代码_git_02](//dev-img.mos.moduyun.com/20231024/dee6dcf2-36dc-4c2f-98c9-8ee7681026fc.png)
这时候跳到了上游仓库,会比对出两个仓库的区别,你修改的东西,如果没有问题,那点击绿色的Create pull request.
![在这里插入图片描述 给开源项目贡献代码_开源_03](//dev-img.mos.moduyun.com/20231024/d0d0e0db-b773-40e5-baa3-23b1208f477f.png)
会让你填写一些内容,比如这个pr做了什么,是否测试等,建议按照官方的都补充一下。然后点击右下方绿色按钮。
![在这里插入图片描述 给开源项目贡献代码_开源_04](//dev-img.mos.moduyun.com/20231024/37f91f9a-9de8-4b9c-9bf1-42a33236f4ab.png)
然后,你就安静的等待seata那边的具有权限的开发者去审核和通过吧。
6.多分支并行开发
可能你在做pr1时,还没做完,又需要提交另外一个pr2,这时候,可以按照下面的方式,再拉一个开发分支。
1.从上游 dev分支拉取新的dev-01分支;
git checkout -b dev-01 upstream/dev
2.修改本地代码
git commit -am “add:add test dev-01”
3.再次拉取下上游代码,防止有人提交了造成冲突
git pull upstream dev
4.将本地修改的代码推送到新的分支,并关联上游分支
git push -u origin dev-01