目次
有時候我們會需要同步來源 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
。照著文件上的範例下指令:
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 tokenOWNER/REPO
:fork repositorybranch
:不一定是 main,選擇要同步的分支
執行完後 fork 就會同步了。
結論
這個方法相當於去 GitHub 上 repository 的頁面點擊 Sync fork > Update branch,不過好在可以用程式的方式決定什麼時候要同步。如果只像這篇文章停留在手動用 curl
觸發的話,似乎不會比在 GitHub 上按按鈕方便多少。