咱们常常看到一个开源库会有不少人一块儿去维护,像 vue,webpack 就会有不少大牛去维护。vue
看着这么多大牛去维护一个开源库,内心也直挠痒痒,很想本身也能一块儿去维护开源库。webpack
不少人在平时开发中只是用到简单的 git 命令,好比 git clone
,git branch
,git checkout -b
,git add
,git commit
,git push
这些命令,其实都只是 git 最基本的操做,有这些基本操做,咱们想给开源库提 pr 还差一点。git
下面我把我本身平时维护 git 库的经验作一个总结,也算是给一些想给开源库提 pr 同窗的一些微小的帮助。github
若是有更好的方法,能够评论补充一下,谢谢你们。web
想给开源库提 pr,第一步确定是咱们要有他们库,而且能够进行开发。接下来我就拿 vue 库作一个示例,看官们能够边看边和我一块儿操做。bash
vue 库确定不可能让咱们直接提交,因此咱们须要找到 vue 库,fork 到本身的 github 仓库中,而后在本身拷贝的 vue 仓库中操做。weex
登陆 github,在 github 中搜索 vue。 fetch
点击 fork 按钮,把开源库 fork 到本身的 github 中。 ui
回到咱们本身的 github 中,就能够看到 fork 好的 vue 库了。 spa
咱们将 fork 好的仓库克隆到本身本地电脑上,而后进行开发。
克隆到本地:
# 克隆 vue
git clone https://github.com/Shiyanping/vue.git
# 进入本地 vue 文件夹
cd vue
复制代码
这样你本地就有了 vue 的克隆版本了,后续就能够愉快的开发了。
摩拳擦掌,开始吧,开发以前你要肯定好具体开发哪一个分支,由于咱们拉下来的代码只有默认分支,可是有些开源库是有不少分支的,不一样的功能或者不一样的版本在不同的分支上,这个在开发以前要肯定好。
若是你只是开发默认分支,能够忽略下面的 开辟咱们本地分支
过程,可是开发开源库,确定避免不了切换不一样的分支,仍是建议跟着下面的操做执行一下。
开辟咱们本地分支:
假设要开发 vue 库中的 weex 分支,这个时候须要借助 origin/weex
分支去开辟一个本地的新分支。origin/weex
就是本身 github 上的 vue 仓库中 weex 分支。
# 查看具体有哪些分支
git branch -r
# 这个时候会将咱们本地分支,本身 github 仓库分支都列出来。
# 这里就不截图了,咱们找到 origin/weex 分支,切换过去。
git checkout origin/weex
# 这里不用管 git 提示,咱们只是借助一下这个分支
# 接下来咱们使用 origin/weex 分支,开辟一个咱们本地的新分支
git checkout -b weex
复制代码
这个时候就有了本地的 weex 分支,来改动点东西,执行一下最熟悉的 git 提交代码的过程。
一顿操做以后,我只是简单改了说明文档,😆。
# 下面这些就不介绍了,你们都知道
git status
git add .
git commit -m "修改说明文档"
git push --set-upstream origin weex
复制代码
这个时候上本身的 github 上就能够看到本身提交的代码和分支了。
这个时候其实能够进行 pr,可是咱们不能这么草率,毕竟这是给开源库提 pr,咱们要当心翼翼,万一提上去一个审核不经过的,多尴尬。因此还有一些问题须要给你们交代一下。有些看官可能以为我问题不少,可是这不是为了让你们更潇洒的提 pr 吗,因此有问题仍是要说清楚的。
一个开源库,是有不少人一块儿开发的,咱们目前开发 weex 分支,有其余人可能在你 fork 库以后,在你提 pr 以前提交了 weex 分支新修改,可是这个时候你本地库和你 github 仓库里面的代码都是旧的,这个时候你若是将刚才修改的代码提交到远程仓库,就会审核不经过,那上面一顿操做就至关于白瞎了,还丢人。
接下来就说如何解决这个问题。
首先来看一下本地仓库有哪些关联的仓库:
# 查看当前关联的仓库
git remote -v
复制代码
由于本地仓库代码是刚拉下来,因此除了本身 github 的仓库之外,没有任何关联的仓库。
这个时候咱们要将 vue 远程仓库进行一个关联:
# 进行关联
# git remote add 远程仓库别名 远程仓库地址
git remote add upstream https://github.com/vuejs/vue.git
# 执行以后不会有任何提示
# 再次查看本地相关联的远程库
git remote -v
复制代码
这个时候就关联上了 vue 远程仓库。
接下来使用 fetch 命令,把远程仓库最新的代码及分支拉取一下。
# git fetch 关联的别名
git fetch upstream
复制代码
执行以后,咱们能够看到把 vue 远程仓库的全部分支代码都拉下来了。
后续咱们在修改了某个分支的代码进行提交时,必定要将远端的仓库进行一个合并,咱们可使用下面的命令实现合并:
# git merge 远程仓库的别名/分支名
git merge upstream/weex
复制代码
若是没有改动,咱们能够直接进行 pr;若是有改动,咱们须要将合并的代码,也提交到咱们本身 github 的仓库中,这样咱们本地代码、本身远程仓库代码就和开源库 vue 原始仓库代码进行了同步。
记得在合并远程仓库代码的时候必定要先 fetch。
git fetch upstream
git merge upstream/分支
复制代码
通过同步远程代码和提交本身修改的代码以后,咱们就能够提交 pr 了,具体操做以下:
上本身的 github 上,若是是第一次提交非默认分支的代码,咱们能够直接点击下图中的 Compare & pull request
按钮。
若是是提交已经存在的分支,好比默认分支,或者某个二次提交的分支,这个时候咱们能够直接点击 New pull request
按钮。
不论是上面那种方式,都会跳转到提交 pr 的界面:
必定要选择对,别提交错了,提交错了通常人也不会给你合并的。
最后点击 Create pull request
按钮。
这样就大功告成了,等着开源库的做者给你合并 pr 吧,初次提交 pr 的喜悦仍是很棒的。
举个例子:你想开发 vue 的 weex,可是 vue 仓库默认分支是 dev,你没有根据
origin/weex
分支去建立本地分支,你直接在 dev 分支上合并了原始仓库的 weex 分支(git merge upstream/weex),这个时候就会有不少冲突,就算你解决掉了,你提交代码也不会有人给你经过。
有更好的办法,但愿你们评论指出来,一块儿探讨,为了你们共同成长