Yikun / yikun.github.com

Yikun's Blog
69 stars 22 forks source link

如何在上游贡献代码(Github篇)? #89

Open Yikun opened 3 years ago

Yikun commented 3 years ago

写给那些刚接触github和开源贡献的你们。

Github贡献上游代码的基本流程:

1. Fork上游分支到你自己的仓库

image

2. 克隆代码到本地

git clone https://github.com/Yikun/spark.git

3. 新增上游的远程分支

git remote add upstream https://github.com/apache/spark.git

将apache/spark设置为远端分支,可以通过git branch -vva查看分支情况。

4. 创建开发分支

git checkout -b SPARK-123456 upstream/master

在Apache社区,一般以JIRA的issue号作为分支名的标识,例如SPARK-123456代表Spark项目的JIRA为123456的问题。 为了方便开发,我们可以基于上游分支upstream/master创建SPARK-123456本地分支。 可以通过git branch -vva查看本地分支与远程分支的对应情况。

5. 同步上游代码。

git pull --rebase

因为我们在第3、4步,已经建立了本地分支SPARK-123456和上游分支upstream/master的上下游关系,因此,这里我们只需要利用git pull --rebase即可完成上游分支upstream/master到本地分支SPARK-123456的代码同步。

6. 提交代码到自己的仓库的SPARK-123456

git push origin SPARK-123456

将基于upstream/master(apache/spark)上游远程分支的本地分支SPARK-123456提交到自己仓库(Yikun/spark)的SPARK-123456分支

其他技巧

利用git alias组合常用命令

使用vim ~/.gitconfig修改[alias]section.

1. 快速下载PR git pr

pr = "!f() { git fetch -fu ${2:-$(git remote |grep ^upstream || echo origin)} refs/pull/$1/head:pr/$1 && git checkout pr/$1; }; f"

git pr 12: 快速将Pull Request ID为12的代码下载到本地

2. 快速同步上游 git sync-upstream

sync-upstream = !"git fetch upstream;git checkout master;git merge upstream/master;git push origin master"
$ git sync-upstream
# git fetch upstream
remote: Enumerating objects: 384, done.
remote: Counting objects: 100% (329/329), done.
remote: Compressing objects: 100% (97/97), done.
remote: Total 384 (delta 187), reused 279 (delta 164), pack-reused 55
Receiving objects: 100% (384/384), 128.90 KiB | 1.42 MiB/s, done.
Resolving deltas: 100% (187/187), completed with 110 local objects.
From https://github.com/apache/spark
   c0a3c0cbbe..eb08b9010a  master     -> upstream/master
# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
# git merge upstream/master
Updating c0a3c0cbbe..eb08b9010a
Total 0 (delta 0), reused 0 (delta 0)
# git push origin master
To github.com:Yikun/spark.git
   c0a3c0cbbe..eb08b9010a  master -> master

git sync-upstream: 同步上游分支的master到自己仓库的master

Peng-Lei commented 3 years ago

High quality notes!

bolin3540 commented 3 years ago

After added upstream, we should type "git pull upstream" before create a new branch.