發 PR?貢獻開源專案?GitHub協作?

Jian-Min Huang
6 min readJun 6, 2021

其實我也是有感而發,因為當年還菜的時候,這幾個詞整天聽人家講也不知道什麼意思 🤔 有時候看那些很棒的文章,步驟都很詳細。

不過我還是當初是在聽了強者我朋友卡洛斯的分享後,自己做了一遍才搞懂 🧑‍💻 所以也不排除這個流程真的是要自己走一遍才有 few 啦 XD

那,我今天要重複造輪子嗎?對 XDD,因為我翻到以前舊的步驟筆記

  1. github fork
  2. local branch update commit push
  3. github open pr
  4. local update commit push
  5. upstream merge
  6. sourcetree add upstream
  7. 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,這樣就完成同步的動作惹 👍

最後的最後的最後,沒了,騙你看而已,ㄅㄅ 👻

--

--