第一次貢獻開源專案

以前看到開源專案上面貢獻程式碼都是大神,遲遲不知道怎麼下手加入討論,很怕一個外行人去攪人家的局很不好意思。

怕.jpg - Home | Facebook

今天分享一下貢獻開源的經驗,讓想要貢獻程式碼的朋友們可以跨出第一步。

前情提要

最近在 Scipy 上面看到一個 document 令人混淆的地方,花了一陣子研究原始碼發現是參數順序對不上的問題,雖然自己把問題繞過去了,但想說順便把這個 issue 反應給 Scipy 的開發者,確認 issues 裡面沒有人開過相關的主題,就來自己開一個吧~

提交 Issue

Issue 其實應用範圍很廣,從回報 Bug 到提供新想法都可以。

每個成熟的開源專案都有自己的 issue 模板可以套,照著裡面的空格填入就好。這次用 Bug 回報,主要要寫的就是敘述問題並重現錯誤,如果知道解法也可以順便附上。

Github 所有的文章是用 markdown 寫的,可以加入超連結、文字 highlight 等。

編輯的時候可以 Preview 看效果

開發者回覆

發了 issue 後過幾天會有開發者團隊開始分流,本來以為那些藍色標籤要自己貼,但實際上只有開發者可以貼。分流後會有對應專門的開發者來回覆,有時候也會有其他社群的人參與討論,有共識後就會請你去改程式碼然後發 Pull Request。

開發規範

改之前要去看他們的 Development guide,通常在原始碼根目錄的 CONTRIBUTING.md 裡面或他們網站上的開發者專區,Scipy 詳細的規範發 PR 時會再提醒一次。

Scipy 會對 commit 的內容與 PR 的名字做規範,例如文件相關的更改要在開頭加上 DOC:,他還會給你一個清單提示你該做什麼。

動手改 code

要改程式碼前要先把原本的程式碼 Fork 過來

正常來講應該要 clone 下來改,自己先在本機跑完測試再 push 到自己的 fork 上,但因為 scipy 有點太大只是要改個 docstring 要 clone 很久,所以就直接在 Github 上面改。改個 docstring 應該不太會報錯 (吧?)

如果是 clone 下來要先開 new branch,然後在 branch 上面改程式碼,不要 push 到 master 上

這裡是用 Github 網站改,改完 preview 一下差異,確認沒問題就在底下按 Create a new branch 然後 commit 程式碼。

提交 Pull Request

按 Propose changes 後就會進入 Pull Request,PR 其實不用寫太多,因為問題都在 issue 中討論過了,只要寫大概改了什麼就好。

重點是要把 issue 的編號連結過來,像我的 issue 編號是 #12719,輸入 gh-12719 就會連過去,不確定的話可以用 Preview 看效果,發 PR 後就會在原本的 issue 中看到連結。

發 PR 之前其實都不會在原本的 Scipy 出現東西,如果有做錯可以新增 commit 上去或是把整個 branch 砍掉。

Code Review

PR 發上去後會先過 CI 檢查程式碼能不能通過測試,等所有測試都跑完後就等其他人來 Code Review,審核的人不一定是開發者,社群所有人都可以參與審核,如果不通過或是寫的太糟會要求修改,如果測試都通過就會請開發者來 Merge Pull Request。

開發者 Merge Pull Request

Merge Pull Request 後會在原本的程式碼上面看到自已的 commit。

最後就會得到 Contributor 的小標籤惹惹惹~~~

總結

整個流程大致上如下:

  • 發現一個沒人問過的問題
  • 提交 Issue
  • 等待開發者 Issue 分流
  • 與社群討論問題
  • 確認修改方向
  • 詳閱開發規範
  • Fork 原始專案修改程式碼
  • 本機測試
  • 提交 commit 到新的 branch 上
  • 提交 Pull Request (PR)
  • 等待 Continuous Integration (CI) 測試結果
  • 社群 Code Review
  • 開發者確認修改
  • Merge 進原始專案

希望這篇可以給那些想要參與 Open Source 但又不知如何下手的朋友一些想法~


發表迴響