寫作到自動發表,用 GitHub 減少了四個步驟
8 February 2024為了平衡寫作與發表,系統化寫作與發表的一體,是我想到的解決方案。這也是最後我選擇 Blot 的一個關鍵。
透過幾個優點,使用 GitHub 為橋樑,目前我在 HackMD 寫完文章,推送到 Github 之後, Blot 就會相對應的更新了。
HackMD 可以直接將文件修改紀錄推送至 Github 之中,反過來要從 GitHub 拉文章近來也是可以,這種雙向的整合,在管理文件上非常方便。
同時 Blot 的 Git 庫存取,也可以跟 GitHub 同步,官方說明文件是透過輸入 Git 的指令實現。
採用 GitHub 當作 Git 庫,就是為了不要在終端-本地主機-存放太多資料,同時我也不喜歡輸入一堆指令(command)。因此,我的目標是當推送變更到 GitHub 後,GitHub 能自動更新 Blot 使用的 Git 庫,連帶更新網站。
查了一些網路文章,自己嘗試了一下,如這篇文章一開始說的,現在這個目標已經實現,詳細的流程如下:
- 寫作:HackMD,Markdown 為編輯的主體,同步可以存擋文件。
- 文章存擋:GitHub,透過 HackMD 與 GitHub 的整合,直接推送至 Blot 在 GitHub 中的 repository。
- Blot 同步:GitHub Action 會直接把每次推送(commit)的更新,直接同步推送(push)到 Blot 的 Git 之中。
- 網站更新:Blot 收到 Git 的更新之後,直接更新網站。
雖然流程上有 4 個步驟,但對我來說是只有「寫作」-「推送」,而且在一個介面 HackMD 即可以完成。
Blot-GitHub 的整合架構
如果已經對 Git 很熟悉,其實透過指令跟本地資料夾管理,更新 Blot 所屬的 Git 是最簡單的,但我不喜歡這樣做。
我很容易忘記自己電腦到底裝了什麼,所以,基本上能發生在雲端的事情,我盡量都不在本地發生。
於是 GitHub 成為了我很重要的一個中介。
佛心的 GitHub 提供幾近無限制的免費服務,捨去使用本地資料夾的操作,可以把文件就存在 GitHub 之上。
根據 Blot 說明文件,在 Git 對於多點同步的支持下,使用者可以同步更新 Blot 與 GitHub 庫(repository)。
Git supports multiple remote URLs. This means you can use the same repository on Blot and GitHub.
由此可知,Blot 不是直接讀取 GitHub 上的文件,而是做同步更新的架構 Blot Git ⇌ GitHub
。當一個發生改變,另外一個同時作動。
HackMD-GitHub-Blot 的架構
如果按照 Blot 原始設計,每次我們更新文件的時候,會是同步推送到上述的兩處(Blot Git 跟 GitHub),使用指令 git push --force
完成。
這跟我真實的流程有一點差異,因為我的文件管理核心在 HackMD,推送會直接更新在 GitHub,並沒有辦法同時推送到 Blot Git。
而由於上面說的 Blot-GitHub 架構,是同時有兩個 Git 庫,當我只更新在 GitHub 的時候,Blot Git 並不會自動更新,當然也不會作動到 Blot 架設的網站。
我實際上的運作模式,當加入了 HackMD 之後,變成了 HackMD ⇌ GitHub → Blot Git
,HackMD 主動提供 GitHub 整合服務,我可以同步文件,但最多就是同步回 GitHub,並沒有辦法完成後段的 Blot Git 更新。
為了讓寫作跟發表一體,我選擇維持 HackMD 寫作跟同步 GitHub。
要完成的自動化目標在:當 GitHub 有更新的時候,自動同步推送至 Blot Git。
使用 GitHub 腳本自動更新 Blot Git
這裡就花了一點時間,因為我對 GitHub 熟悉度還不夠,但是一直有聽到 GitHub Action 可以幫助自動化。
在網路上做了點功課,輸入關鍵字 automation commit push changes
搜尋,1找到了一些文章,234了解到應該是使用 Workflow 去設定。需要創建 workflows
資料夾與檔案如下。
檔案名稱:<your-workflow-name>.yml
放置在:./.github/workflows/
然後根據官方文件,把 .yml
檔案的內容更新如下。
name: Push when commit
on:
push:
branches: [ master ] # Replace ... with the branches you want to trigger upon.
jobs:
job-name: # set your job name to something nice.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # all branches and tags
- name: Set git identity
run: |
git config user.name 'github-actions[bot]'
git config user.email 'github-actions[bot]@users.noreply.github.com'
# ...
# ADD YOUR GIT OPERATION STEPS HERE
# ...
- name: Push
run: |
git remote set-url origin https://Blot 登入帳號:Blot Git Key@blot.im/clients/git/end/Blot Git 名稱.git
git push --force
幾個我自己修改的地方在 uses: actions/checkout@v4
看到一些文件都是用 checkout@v2
但我總是不成功,最後改成現在的版本,就能夠順利操作了。
另外就是特別提醒,因為 Blot 登入帳號使用 Email,其中 @
的符號在 git 指令中,是需要轉換成 Unicode,所以請記得變成 xxx%40gmail.com
的形式,其中 %40
就來代表 @
的。
修改過上述的兩個地方後,本來無法成功的自動推送到 Blot Git,就能夠順利運作了。
GitHub 免費版本夠 Action 用嗎?
先說結論,用到現在答案是「非常夠用」。
GitHub 真的是一個佛心的服務,只要是公開的 Repo 都沒有限制數量,而針對 Actions 有提供每月 2,000 分鐘使用額度。
上面 git 只有兩行操作指令,使用得量真的是非常的少,現在用差不多快要一個月,平均一天會更新 1-2 次,用量還不到 100 分鐘。
看來純文字的概念建構,流量真的是非常精省。
小結:少了理由,專注思考是否寫作
暢銷書原子習慣不斷提醒,減少跟習慣間的阻力,可以增加養成習慣的成功率。我本來不以為意,但是實驗之後,現在認為的確頗有道理。
減少了三個步驟,寫作跟發表現在基本上就是在同一個平台—HackMD—完成,至少找到藉口的機會變少了,不能在用「麻煩」當作不寫作的理由,更有機會重新檢視:自己到底是不是真的想寫。
這是我想要很久的一種寫作環境,目前非常滿意,分享給你。
期許每個人都過上想要的生活。