Open Yikun opened 3 years ago
写给那些刚接触github和开源贡献的你们。
git clone https://github.com/Yikun/spark.git
git remote add upstream https://github.com/apache/spark.git
将apache/spark设置为远端分支,可以通过git branch -vva查看分支情况。
git branch -vva
git checkout -b SPARK-123456 upstream/master
在Apache社区,一般以JIRA的issue号作为分支名的标识,例如SPARK-123456代表Spark项目的JIRA为123456的问题。 为了方便开发,我们可以基于上游分支upstream/master创建SPARK-123456本地分支。 可以通过git branch -vva查看本地分支与远程分支的对应情况。
SPARK-123456
upstream/master
git pull --rebase
因为我们在第3、4步,已经建立了本地分支SPARK-123456和上游分支upstream/master的上下游关系,因此,这里我们只需要利用git pull --rebase即可完成上游分支upstream/master到本地分支SPARK-123456的代码同步。
git push origin SPARK-123456
将基于upstream/master(apache/spark)上游远程分支的本地分支SPARK-123456提交到自己仓库(Yikun/spark)的SPARK-123456分支
使用vim ~/.gitconfig修改[alias]section.
vim ~/.gitconfig
[alias]
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的代码下载到本地
git pr 12
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
High quality notes!
After added upstream, we should type "git pull upstream" before create a new branch.
写给那些刚接触github和开源贡献的你们。
Github贡献上游代码的基本流程:
1. Fork上游分支到你自己的仓库
2. 克隆代码到本地
3. 新增上游的远程分支
将apache/spark设置为远端分支,可以通过
git branch -vva
查看分支情况。4. 创建开发分支
在Apache社区,一般以JIRA的issue号作为分支名的标识,例如
SPARK-123456
代表Spark项目的JIRA为123456的问题。 为了方便开发,我们可以基于上游分支upstream/master
创建SPARK-123456
本地分支。 可以通过git branch -vva
查看本地分支与远程分支的对应情况。5. 同步上游代码。
因为我们在第3、4步,已经建立了本地分支
SPARK-123456
和上游分支upstream/master
的上下游关系,因此,这里我们只需要利用git pull --rebase
即可完成上游分支upstream/master
到本地分支SPARK-123456
的代码同步。6. 提交代码到自己的仓库的SPARK-123456
将基于
upstream/master
(apache/spark)上游远程分支的本地分支SPARK-123456
提交到自己仓库(Yikun/spark)的SPARK-123456
分支其他技巧
利用git alias组合常用命令
使用
vim ~/.gitconfig
修改[alias]
section.1. 快速下载PR
git pr
git pr 12
: 快速将Pull Request ID为12的代码下载到本地2. 快速同步上游
git sync-upstream
git sync-upstream
: 同步上游分支的master到自己仓库的master