Pull Shark 是 GitHub 的成就徽章,依你被合併的 PR 數量分級。這篇整理它實際的計數方式。有幾個常見說法其實是反的,我只寫查得到證據的部分,推論的地方會標出來。
等級門檻
| 等級 | 徽章顯示 | 需要的 merged PR 數 |
|---|---|---|
| 預設 | 無倍數 | 2 |
| Bronze | x2 | 16 |
| Silver | x3 | 128 |
| Gold | x4 | 1024 |
這組門檻不是猜的。點開自己的 Pull Shark 徽章明細,GitHub 會標出觸發每一級的那筆 PR,寫著「2nd / 16th / 128th / 1024th pull request merged」,正好對上 2、16、128、1024。Bronze/Silver/Gold 是 GitHub 內部的命名,你在徽章上看到的是 x2/x3/x4;徽章只顯示你在哪一級,不顯示目前累積了幾筆。
哪些 PR 會被算
PR 要真的被 merge,只有 closed 不算。除此之外,範圍比多數人以為的寬:
- 公開 repo 的 PR:算。
- 私有 repo 的 PR:算(下面有實例)。
- 你自己名下 repo 的 PR:算,連你自己開、自己按 merge 的也算。
也就是說,幾乎所有被 merge 的 PR 都算,不太挑 repo 是誰的、公開還是私有。
一個實例:私有和自己 repo 都會算
拿一個 Gold(x4)帳號來看,用搜尋 API 把它的 merged PR 拆開:
- 總數:1024
- 依可見度:公開 805、私有 219
- 依擁有者:自己名下 784、別人的 240
私有會算:如果私有不算,這帳號公開只有 805,永遠到不了 Gold 的 1024,但它就是 Gold。而且徽章明細顯示,觸發 Gold 的第 1024 筆是一個公開 repo 的 PR,在它之前得先累積 1023 筆;公開撐不到 1023,中間那兩百多筆只能是私有。
自己 repo 會算:這 1024 筆裡有 784 筆(約四分之三)在帳號自己名下的 repo,一樣計入。
「私有貢獻」設定的迷思
GitHub 有一個跟「私有貢獻與成就顯示」有關的設定,名字裡帶著 achievements,容易讓人以為打開它,私有 PR 才會算進徽章。
但翻官方文件,這個設定只講兩件事:讓私有活動以匿名數字顯示在貢獻月曆、以及控制徽章要不要顯示出來。它沒有把「私有 PR 算不算成就」寫進去,社群對「是不是要開這個設定私有才算」的說法也不一致。可以確定的是私有會算(上面那個 Gold 帳號就是證明);至於是不是每個帳號都一樣、需不需要先開這個設定,官方沒明寫,這裡保留。
搜尋數字接近徽章,但不等於
因為公開、私有、自己 repo 幾乎都算,is:merged author:你 的總數其實很接近你真實的 Pull Shark 數,這跟「私有或自己 repo 不算」的直覺剛好相反。
但兩者不相等。GitHub 的計數是它自己的累計器,合併當下加一、之後不會退回,所以會比搜尋略高。用上面那個帳號實測:徽章把觸發 Gold 的那筆標為第 1024,搜尋卻只把它排到第 1009,差 15。而且這個差不是固定的——拿它更早的里程碑回推,差距是 0(第 2 筆)、1(第 16)、2(第 128)、15(第 1024),隨累積量愈拉愈大。最合理的解釋是:有些 PR 當初併進後來被刪掉或轉私有的 repo,搜尋現在找不到,但當初已經計入徽章,而這種「消失的 repo」會愈積愈多。所以搜尋是很接近的近似值,而且偏低估,不是精確數。
自己拆開來看
把 USER 換成你的帳號:
gh api -X GET search/issues -f q="is:pr is:merged author:USER" --jq '.total_count' # 全部 merged,接近你的 Pull Shark 數(通常略為低估)
gh api -X GET search/issues -f q="is:pr is:merged author:USER is:public" --jq '.total_count' # 公開
gh api -X GET search/issues -f q="is:pr is:merged author:USER is:private" --jq '.total_count' # 私有,一樣會算
gh api -X GET search/issues -f q="is:pr is:merged author:USER is:public -user:USER" --jq '.total_count' # 公開且不是自己名下的 repo
來源
- GitHub Docs:Showing your private contributions and achievements on your profile
- GitHub Community 討論:#18243、#18190、#176080