skip to content
鰭狀漏斗

使用 GitHub API 同步 fork

/ 閱讀時間 3 分鐘

目次

有時候我們會需要同步來源 repository 的變更到自己的 fork 上。同步的方法有很多種,在這篇文章中,我要介紹怎麽使用 GitHub 的 API 做同步。

取得 personal access token

要使用 GitHub 的 API 對 repository 做更動需要有 personal access token,所以要先產生一個 personal access token。

首先到這個頁面,不信任我的連結也可以自己點:Settings > Developer Settings > Personal access tokens > Fine-grained tokens。點擊 Generate new token。

名字、說明、owner、期限可以照自己需求選。Repository access 為了安全起見,我這邊選 Only select repositories,然後只選擇自己 fork 的 repository。

接著選擇要授予的權限,一樣為了安全起見,我只選擇必要的權限。在 Repository permissions 下,要選擇:

  • Contents: Read and Write
  • Workflows: Read and Write

選擇 Contents 權限很合理,至於要給 Workflows 權限的原因是如果沒有給這個權限的話,如果來源的 repository 有對 Workflows 檔案做變更,會無法同步。

產生後會顯示這個 personal access token,把它複製起來。它只會出現一次,如果沒有複製到,只能按 Regenerate token 按鈕重新產生。

使用 API

要使用的 API 是這個:/repos/{owner}/{repo}/merge-upstream。照著文件上的範例下指令:

Terminal window
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/OWNER/REPO/merge-upstream \
-d '{"branch":"main"}'

指定:

  • <YOUR-TOKEN>:剛剛取得的 personal access token
  • OWNER/REPO:fork repository
  • branch:不一定是 main,選擇要同步的分支

執行完後 fork 就會同步了。

結論

這個方法相當於去 GitHub 上 repository 的頁面點擊 Sync fork > Update branch,不過好在可以用程式的方式決定什麼時候要同步。如果只像這篇文章停留在手動用 curl 觸發的話,似乎不會比在 GitHub 上按按鈕方便多少。