如何在上游贡献代码(Github篇)?
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上游分支到你自己的仓库
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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK