發 PR?貢獻開源專案?GitHub協作?
--
其實我也是有感而發,因為當年還菜的時候,這幾個詞整天聽人家講也不知道什麼意思 🤔 有時候看那些很棒的文章,步驟都很詳細。
不過我還是當初是在聽了強者我朋友卡洛斯的分享後,自己做了一遍才搞懂 🧑💻 所以也不排除這個流程真的是要自己走一遍才有 few 啦 XD
那,我今天要重複造輪子嗎?對 XDD,因為我翻到以前舊的步驟筆記
- github fork
- local branch update commit push
- github open pr
- local update commit push
- upstream merge
- sourcetree add upstream
- sourcetree fetch merge(rebase) push
只有文字,也是佩服我自己居然不會忘記。想說根據 輸出學習法 就來乾脆寫個文章記錄好了,如果有人剛好看到還學會了什麼,那我這時間也算花得有價值 💪
不過我不會放太多圖片,一者我覺得圖片有時效的議題,二者自己也想慢慢練習 Working Backwards 裡頭 以文字製作產品原型 的概念。做到反覆打磨、精煉文字以及定義產品。
我自己當年剛從 SVN 轉成 Git 時,一個粗淺的理解是把 Git 看成雙層版控。也就是 local 一層,origin 又一層。所以如果到這邊你能聽懂我在講什麼,PR 其實就是存在一個跟 origin 同級的 remote,你需要把你的 origin 跟它做同步。
情境 1,我寫 bot 的時候用了一個 Java slack bot sdk 🤖,然後發現功能上有一個編碼的小問題,會讓中文變成亂碼。所以有經驗的 Java Developer 大概都知道有地方沒有 UTF-8 惹 😂,那下面我記錄一下當時的步驟。
- 找到那個 sdk 的 GitHub Repo,按下右上角那個 fork,然後就會把整份原始碼叉一份到你自己的帳號底下。
- 回到你自己的 GitHub,現在他是屬於你的 repo,你要 clone 下來、切 branch、commit 修改、push branch 都有權限,所以像我大概就改了這些地方。https://github.com/Jian-Min-Huang/java-slack-sdk/commit/41a139a4bcff43a18f79df1a3e5bd5d535d54bd4
- 準備發 PR,一般來說如果你們是自己的團隊組織可能會有 issue 跟 pull request 對應的一些 policy。但如果是純社群專案,比較禮貌的做法是遵守 source repo 指定的規則發。那如果都沒有限制,至少也可以發個 issue 跟作者講一下,一般都是樂意接受的。https://github.com/slackapi/java-slack-sdk/issues/429
按下 PR 的按鈕,他會有一個方向告訴你是哪邊要合併進去哪邊,記得以前人家用中文解釋是說,發一個請求請作者把你更改的分支 pull 回去合併。然後進入審 PR 程序,例如有沒有遵守作者訂的 policy、測試有沒有跑成功等等等
https://github.com/slackapi/java-slack-sdk/pull/430
- 如果順利的話作者按 merge 之後你的修改就會出現在作者帳號的 GitHub repo 裡面,後續他如果有發佈新版本你就可以注意你的修改有沒有包含在裡面。
情境 2,我之前 fork 過這個專案,可是後來一陣子沒跟上,作者 Repo 那邊修改了不少程式碼,跟我當初複製的專案已經不同步,如果我做新修改之前想先同步,該怎麼做?題外話,其實你砍掉重 fork 也是可以啦 XDD,但不要,拜託 😱
- 像我們前面說的,origin 是你的 repo,作者的 repo 是同級,你需要把你的 origin 跟他做同步。我這邊是使用 Sourcetree 啦,但如果你是很酷的 cmd 或是 ide 流派也沒問題。反正第一步就是建立另外一個 remote
- 建立下來就可以 Sourcetree 簡單手動操作啦,如果是要同步 master branch 的話,就是把 remote/master 拉下來 local,更新 origin/master 對應的 local,然後 remote/master 合併進去 origin/master,再看你要不要 push 到 origin/master,這樣就完成同步的動作惹 👍
最後放一些參考資料好了,其實 Google 排名前三個的搜尋結果都超棒,大家可以參考一下,前兩個還是名人做的,是龍哥跟六角學院他們。
最後的最後,來增加一點社群的元素好了,我開了一個 https://github.com/b2etw/b2etw-pr-practice,如果有人想練習 pr 的話可以來這邊,我陪你。
最後的最後的最後,沒了,騙你看而已,ㄅㄅ 👻