在 Github 的朋友們應該有發現,最近已經不能直接推送更新到Github的儲存庫 (repository)。原因是從八月十三號 Github 開始禁止沒有個人訪問令牌 (Personal Access Token, a.k.a. PAT) 的帳號推送更新到 Github ,如果像以前一樣執行 $git push origin master
會得到圖一的結果。Github官方有教怎麼在下載 repository 的同時設定 PAT ,但是要怎麼修改已經載好的 repository 的 PAT 呢?

生成 PAT
請參考 Github 官方的做法生成一串 PAT,PAT 不可外流,他就像密碼一樣,擁有它的人就擁有了相關的權限。生成後看起來像圖二。

每一個 PAT 只會生成一次,請使用者一定要收好。如果忘記或是外流了,可以選取該 PAT 的名字後執行「重新生成(Regenerate token) 」。這樣一來系統會生成一個新的 PAT 取代掉舊的,並且有用到這個 PAT 的所有 repository 也都需要重新設定存取權。
新增 PAT 到遠端 (remote)
需要新增PAT的理由可能是原本本地端的 repository 沒有設定 PAT ,或是PAT失效了。無論如何,我們可以透過「重設遠端」來新增或修改PAT。下面我以我的 repository 以及預設的遠端 origin 做示範。當然,我的 PAT 也是保密的,各位要用自己的 repository 及 PAT 喔!開始之前,先把 repository 下載下來,程式碼如下,效果如圖三:
# 從遠端下載repository
$ git clone https://github.com/jacob975/my_machine_learning_handscript

接下來,我們隨便新增文件到本地端的 repository ,並且嘗試推送到遠端。執行的程式碼如下、效果如圖四:
# 新增文件
$ echo "Whether PAT is working?" > test_pat.txt
# 確認狀態
$ git status
# 新增 "test_pat.txt" 到 git
$ git add test_pat.txt
$ git commit -m "Add a file for test PAT"
# 推送到遠端
$ git push origin main

效果如圖四所示,推送失敗了,因為我們還沒有設定PAT。這應該也是很多讀者可能遇到的情況,接下來我會移除遠端 origin ,然後新增一個有PAT的遠端。程式碼如下、效果如圖五:
# 移除名為 "origin" 的遠端
$ git remote remove origin
# 新增名為 "origin" 的遠端
$ git remote add origin https://<your_PAT>@github.com/jacob975/my_machine_learning_handscript
$ git push origin main # 應該就能推送成功了!

小結
關於修改 Github PAT,我在網路上還沒找到中文的做法所以自己寫了一個(英文的已經有很多了)。我希望這篇文章可以幫到把 Github 當作 code 備份伺服器的人。我的朋友好像有滿多會這麼做的。平常已經很熟悉 git 或是有在用 git在協作開發的人就可以略過這一篇了。