用 GitHub 精省寫作到自動發表流程

8 February 2024

為了平衡寫作與發表, 系統化寫作與發表的一體, 是我想到的解決方案。 這也是最後我選擇 Blot 的一個關鍵。

透過幾個優點, 使用 GitHub 為橋樑, 目前我在 HackMD 寫完文章, 推送到 Github 之後, Blot 就會相對應的更新了。

在 HackMD 中自動整合 GitHub 實現版本同步在 HackMD 中自動整合 GitHub 實現版本同步

HackMD 可以直接將文件修改紀錄推送至 Github 之中, 反過來要從 GitHub 拉文章近來也是可以, 這種雙向的整合, 在管理文件上非常方便。

同時 Blot 的 Git 庫存取, 也可以跟 GitHub 同步, 官方說明文件是透過輸入 Git 的指令實現。

採用 GitHub 當作 Git 庫, 就是為了不要在終端-本地主機-存放太多資料, 同時我也不喜歡輸入一堆指令 (command)。 因此, 我的目標是當推送變更到 GitHub 後, GitHub 能自動更新 Blot 使用的 Git 庫, 連帶更新網站

查了一些網路文章, 自己嘗試了一下, 如這篇文章一開始說的, 現在這個目標已經實現, 詳細的流程如下:

  1. 寫作: HackMD, Markdown 為編輯的主體, 同步可以存擋文件。
  2. 文章存擋: GitHub, 透過 HackMD 與 GitHub 的整合, 直接推送至 Blot 在 GitHub 中的 repository。
  3. Blot 同步: GitHub Action 會直接把每次推送 (commit) 的更新, 直接同步推送 (push) 到 Blot 的 Git 之中。
  4. 網站更新: 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 分鐘。

近一個月的 GitHub Actions 使用分鐘數近一個月的 GitHub Actions 使用分鐘數

看來純文字的概念建構, 流量真的是非常精省。

小結: 少了理由, 專注思考是否寫作

暢銷書原子習慣不斷提醒, 減少跟習慣間的阻力, 可以增加養成習慣的成功率。 我本來不以為意, 但是實驗之後, 現在認為的確頗有道理。

減少了三個步驟, 寫作跟發表現在基本上就是在同一個平台-HackMD-完成, 至少找到藉口的機會變少了, 不能在用 「麻煩」 當作不寫作的理由, 更有機會重新檢視: 自己到底是不是真的想寫。

這是我想要很久的一種寫作環境, 目前非常滿意, 分享給你。

期許每個人都過上想要的生活。


  1. 好像以後可以使用 ChatGPT 或 Gemini 來幫忙。↩︎

  2. https://link.medium.com/NkA6C8kr0Gb↩︎

  3. https://www.reddit.com/r/github/comments/nzmikl/anyone_know_a_way_to_auto_commit_and_push_changes/↩︎

  4. https://openedx.atlassian.net/wiki/spaces/AC/pages/3378348233/Writing+a+GitHub+Action+that+pushes+commits↩︎

Latest Updated on 29 May 2024

電子報訂閱



相關文章
技術規格


2006 - © Eyewithouts, made with ♡ by Blot.im