0

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

 2 years ago
source link: https://yikun.github.io/2021/04/27/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8A%E6%B8%B8%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81%EF%BC%88Github%E7%AF%87%EF%BC%89%EF%BC%9F/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

写给那些刚接触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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK