本文推薦在作者的個人博客網站閱讀:shenying.online
一、故事背景
故事發生在大學上學期間(而不是寒假)。上學期間,宿舍條件極其惡劣,半夜斷電、空間狹小。我們大學垃圾條件使用游戲本的種種弊端被無限放大:游戲本電源適配器極其臃腫,不插電的情況續航堪憂(難以超過兩個小時),并且由于其結構上的臃腫,在狹小的宿舍空間每次移動、打開猶如小平房開拖拉機。
將游戲本帶去圖書館學習就更是天方夜譚,在此之前我也買了一個MatePad的平板,但是平板的使用場景對一個計科學生來說也實在有限。
于是,我用在學校做臨時監考工作掙的錢入了一臺MacBookAir(二手只要3k左右)。與此同時,我也預知了我即將支付不起博客網站巨額服務器費用的未來,未雨綢繆將博客遷移到了Hexo框架上,從此再無數據擔憂。
我在我的MacBook上第一次部署了Hexo框架,并且由于在學校的主力機是Mac,從來沒有想過在我的游戲本(也就是Windows系統)上部署Hexo框架會怎樣。或者說,我從來沒有考慮過移植的問題。
事情的轉機從我的寒假生活開始。寒假回到家中,我的ROG魔霸新銳2023游戲本再次啟動(沒錯我就是故意寫全了得瑟的😁)。之前的缺點(笨重、移動續航堪憂)瞬間不再是缺點!在家里我的游戲本也是直接化身游戲主機站樁輸出,不再需要頻繁移動使用。于是我將可憐的MacBook拋到一邊,低刷低配的低能MacOS一邊去,Windows萬歲。
直到一段時間后我又開始寫Hexo博客,習慣了Wordpress網頁端后臺直接書寫博客的我一時間竟不知道如何在我的Windows上寫博客。我看了幾篇博客:Hexo從Mac到Windows。我本來以為這樣就能解決了,抄作業嘛多簡單~
結果就是,我看了好幾篇類似的Mac遷移Hexo到Windows的博客,在我的電腦上按照相同的步驟最終都會在同一個步驟報錯。報錯!報錯!還是報錯。
嘗試過和人機ChatGPT老師交流,無果ed。
誰知這事兒就這樣撂下了,我也懶得研究了,幾乎有半個寒假,我每次想在我的shenying.online
上發布博客都是將陣地轉移到Mac上操作。就這么麻煩的事兒我干了一個寒假,就因為跟著上面說的博客做爆了錯沒有成功移植(要知道我寒假主力機一直是Windows的ROG,你可以想象我正在用windows寫Markdown格式的博客,但是到了發布到Gitpage的時候卻不得不打開Mac再復制過去發布一遍)。
直到2月12日事情才迎來了轉機,我實在無法忍受這種寫博客的割裂感了!我要像Hexo(駭客)一樣寫博客!我不能忘記老祖宗傳下來的編程教養:優雅。這么粗魯的事情不能再干下去了,一點兒也不Hexo。
接下來就是我自己弄懂的Heox博客部署原理以及多端部署的核心思路。
二、Hexo 文件結構解讀
想知道Hexo如何多端部署,先要知道Hexo是怎么工作的。首先我們來看看Hexo框架的文件結構:
看好了,別眨眼。這里的node_modules
是node的用到的庫,系統會根據你安裝的主題啊之類的自定義自動生成,不用太關注他(意思是弄丟了也沒事兒,畢竟不是核心數據)。
public
是你用hexo g
后生成的靜態文件。相應的hexo clean
會刪除他。
scaffolds
也是Hexo初始化會自動生成的默認文件,你寫文章不會影響里面的文件所以不用管他。
source
就非常重要了,我們重點來看一下。可以看到,里面存放的是最核心的文件,也就是博客網站的生命,博客文章的.md格式文件,草稿,還有一些主題生成的文件,這里以我常用的主題redefine為例,個別文件可能不一樣。
themes
文件夾里沒什么重要的文件,不用管。
這里就要談一下Hexo的工作機制了,Hexo本質上還是類似Vue腳手架那一套的前端框架。你可以理解為你在本地編寫了source中的文件,這時候你想要發布到網頁上去,Hexo就會幫你項目打包到public文件夾中并成為一個靜態的前端項目,然后將public文件夾中的文件部署到Gitpage。
發現沒有,這里的public
的功能很像你寫一個程序,編譯成了exe。你把exe發送給別人讓別人直接執行。
并且這里的source
相當于是你的元數據,類似于數據庫一樣至關重要的存在。
接著說說這里的_config.yml
,這是你的網站的一些配置,也就是個性化的自定義文件。如果你使用的主題,就會有主題對應的_config.yml
來配置你的主題的一些個性化設置,例如這里有兩個主題:config.landscape.yml
和config.redefine.ym
。
package.json
中存放著你用npm下載的包的信息,你可以理解為npm是一個應用商店,這就是應用商店的應用列表。我看的教程中就是告訴我把原來電腦的package.json
拷貝過來然后在根目錄npm install
。結果我按著操作,每次安裝都會抱一堆警告和錯誤。
所以,這個文件我們也不需要。
2.1 需要的文件
綜上所述,我們其實只需要關注我們博客網站的核心文件即可,我建議將他們專門備份到一個代碼倉庫:
沒錯,就是他們。你看我多謹慎。想想如果我還在使用Wordpress博客來備份還需要備份什么數據庫,如果用Hexo靜態博客框架就只需要把你的文章的.md
文件和站點配置文件_config.yml
全塞進一個倉庫就行了,多方便。
當然還有一種更加優雅的方案:創建一個名為Hexo的分支,存放你的Heox本地配置文件。網上都能找到教程,點我跳轉到其中一篇。
由于Hexo會將source經過框架內部的處理和美化最終生成一個public部署到Gitpage,而public又是有別于source的。比如,你好世界.md
這篇文章在public
中找到后已經變成了你好世界.html
了。所以Github的博客托管倉庫中是沒有我們的source的,也找不到那些文章的.md
的markdown文件。它都變成html
格式了,你還怎么玩?
這些重要文件只會在你的本地計算機上,所以一定要自己及時備份起來以防后患(說不定哪天你的電腦就自己偷偷喝咖啡了呢~🔪)。
完成這些文件的備份,工作就很機械了。我的終極完美適配的思路是:按照原來你部署的方式,老老實實地從零開始部署。冷靜地打開你的主題的官方文檔,老老實實地把主題包括每一個插件自己安裝上。
沒錯,你沒有聽錯,終極的方案就是這么樸實無華。
然后的然后,把source
和config
相關的文件一五一十的替換。在Gitpage或者說Github的博客托管倉庫中創建一個新的Branch,BranchName(分支名)就見仁見智了,比如我在Windows寫博客的時候,用windows這個branch。
然后就是很是很重要的一點(我已經不知道說了多少個然后了,果然連接詞還是得多學啊,Then,After that什么的,哈哈)。你最后總要hexo d
然后把你的靜態文件托管上去的吧,所以別傻傻的把_config.yml
完全替換過去。你總得把里面的branch名字改成你新創建的branchName吧。
三、協同方案分析
完成了上述,你已經有一個專門分支了吧?我的建議是每個電腦一個分支。我來舉個例子,比如你最新的進度是在Mac上寫的,并且分支名是main(github由于種族問題已經將默認分支master改成了main了),這個時候你想在windows電腦上寫一篇文章,然后你就寫,寫完之后hexo clean
、hexo g
、hexo d
一步沒落下,最終靜態文件被托管到了branch windows
下。
這個時候你可能又回到了mac電腦上了,就需要同步一下博客的進度。所以你需要將main
分支和windows
分支同步即可。
具體的,如果長期在windows上寫博客,并且懶得更新原來的分支了,你可以在Gitpage將默認分支改為windows(非必需),將Gitpage的渲染的分支改為windows(必須)。
這里可以使用本方案:
下面的描述很人機因為是問的ChatGPT,不問DeepSeek是因為deepSeek服務器被打廢了。
1.切換到 main
分支:
git checkout main
2.拉取 main
分支的最新更新:
git pull origin main
3.切換到 wind
分支:
git checkout wind
4.將 main
的更新合并到 wind
:
git merge main
這樣,wind
分支就會包含 main
分支的最新內容。如果有沖突,你需要手動解決沖突。
5.推送合并后的 wind
分支:
git push origin wind
四、補充一個更加全面的備份方案
前面不是說了嘛,hexo不會將本地的文件上傳到Github博客的倉庫,那如果這個本地文件丟失了豈不是糟糕?上面也提到一種最簡單粗暴的備份方案,將source
和config
直接扔到一個倉庫中。
但是,這種方案在分支備份大法前就顯得不那么優雅了。
因為在本地的hexo項目中無法使用git
命令,所以我們要將遠程的倉庫克隆下來方便我們添加一個新的分支hexo
,并在hexo
中專門存放我們的本地項目文件。注意,之前提到的main
分支或者說默認分支都是存放的hexo打包好的靜態頁面文件,我就不多提了。
具體的方法:
# 1.克隆遠程倉庫
git clone git@github.com:CCCCOOH/CCCCOOH.github.io.git(根據自己的倉庫來決定)# 2.cd到克隆下來的倉庫目錄下(這里省略,根據你的文件目錄來),然后創建一個新的分支hexo
git branch hexo# 3.將分支切換到hexo
git checkout hexo# 4.刪除原來的文件(單獨留下.git),將本地的文件(建議刪除public)拷貝到目錄下。
# 5.最后將分支推送到遠程(Githhub倉庫)
git add .
git commit -m '添加了hexo分支用于存放本地文件'
git push origin hexo
這里講給git
小白聽。在第四步中你創建了hexo
后,hexo
默認會復制默認的分支,所以文件夾中的文件和默認分支一樣。我們不需要這些文件,將他們刪除,然后再拷貝你的本地文件到這個目錄下并推送到遠程就好了。
附一張備份文件目錄的圖。