利用bat一鍵更新HugoBlog
方便快速有效

一鍵更新

透過.bat批次執行檔,一鍵打包+發布

  • 首先要安裝git用來推送,這個很基本就不多說
  • 接著要有權限,讓本機電腦的git可以連上遠端的github的個人倉庫並允許上傳
  • 具體作法是在本機電腦生成一個key(一串暗號),然後到個人的github網頁上設定,約好拿這個key來的人就允許上傳,步驟如下:

生成本機key

  • 隨便開一個cmd,輸入ssh-keygen後enter執行,開始產生金鑰,沒有想特別設定的可以無腦enter
$ ssh-keygen                                   # 產生金鑰
Generating public/private rsa key pair.
Enter file in which to save the key :   
# 金鑰存放路徑,預設會放到我的文件/.ssh
# 放哪不是特別重要,有強迫症可以自己改,否則直接按Enter

Enter passphrase (empty for no passphrase):    # 密碼,可設定可不設定,設定的話每次上傳會多需要輸入一次密碼
Enter same passphrase again:                   # 再輸入一次密碼
The key fingerprint is:                        # 之後會顯示你的 fingerprint,到這裡就完成 key 的產生了

將key報備到專案

  • 到生成的路徑,找id_rsa.pub,右鍵筆記本編輯打開,會看到很長一行開頭是"ssh-rsa ………….",全選複製

image-20211128105840868

  • 回你的github專案

image-20211128105742295

  • 內容貼上剛剛複製的那行
  • 自己給這個key起個名,懶得命名可以取剛剛那串最尾的"使用者@電腦"當名稱
  • 記得勾選允許push

建立批次執行檔

起一個.bat檔案,放在hugo的根目錄(跟config.toml同層)

@echo off
set pan=.\public\
set repo=git@github.com:yoziming/yoziming.github.io.git
set branch=master
if exist %pan% (
    echo "clean public directory"
    rd /S /Q %pan%
    echo "Hugo again for new site"
    hugo
) else (
    echo "can not find public directory"
    echo "Hugo again for new site"
    hugo
)
if exist %pan% (
    cd %pan%
    echo "git init and commit"
    git init
    git add --all
    git commit -m "update site at %time%"
    echo "set remote repository and push forcely"
    git remote add origin %repo%
    git push -f origin master:master -v
) else (
    echo "can not find public directory, hugo fail!"
)
pause

其中這2行要自己編輯

set repo=git@github.com:yoziming/yoziming.github.io.git
// 修改成你的用戶名與倉庫網址
set branch=master
/* branch是倉庫裡的分支,預設有可能是main,這邊是用master

更改專案預設分支

image-20211128104929795

更改個人頁面的資料來源

image-20211128104750907

完成

  • 以後更新只要執行這個bat瞬間就搞定

image-20211128105931063

  • 注意這個腳本是每次都把倉庫清空重傳,我本身檔案不多速度很快,如果只想上傳更新的部分可以估狗其他教學,我也有看過相關的辦法

補充1

在末尾加入上傳完自動關閉功能

echo "ALL DONE"
echo "ALL DONE"
echo "ALL DONE"
echo "waiting for auto exit..."
timeout /t 1

補充2

如果文章時間設在未來然後用draft控制是否顯示的,用-F可以強制把未來日期的文章也一併上傳

把有用到hugo指令的地方都改成
hugo -F

上次修改於 2021-12-01