咱們常常看到一個開源庫會有不少人一塊兒去維護,像 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),這個時候就會有不少衝突,就算你解決掉了,你提交代碼也不會有人給你經過。
有更好的辦法,但願你們評論指出來,一塊兒探討,爲了你們共同成長