Hexo多客戶端同步問題

SleepYM09發表於2018-08-27

在家裡同步github上的部落格原始碼時發現無法同步themes/next,本文主要記錄用git subtree解決該問題(其他theme方法相同),對於Git使用不太熟悉的朋友 可以看下這篇文章

原因

next的整合文章中是用clone方法來使用的,而git無法直接管理這樣的巢狀模組。

解決

方案一: 簡單粗暴解決

直接刪掉next/.git資料夾,將next當成普通的檔案加入到版本控制當中,但是這樣操作之後無法更新next主題。

方案二: subtree
  1. 首先需要在自己的github上fork一份next原始碼

    fork原始碼

    接著會在自己的github Repositories中多出一個同名專案
    自己倉庫

  2. 新增subtree

# 新增遠端倉庫 
# git remote add -f <子倉庫名> <子倉庫地址>
$ git remote add -f next git@github.com:LittleSmileMonkey/hexo-theme-next.git

# git subtree add --prefix=<子目錄名> <子倉庫名> <分支> --squash
$ $ git subtree add --prefix=themes/next next master --squash
複製程式碼

此階段碰到的bug: 因為之前已經clone過next專案到themes/next中,所以直接操作第三步第二條命令時會出現下面錯誤

subtree add 報錯

嘗試刪除next資料夾然後執行(記得將自己修改過的例如_config.yml備份),會出現下面錯誤
刪除next後報錯

刪除本地倉庫的themes/next 並提交到遠端倉庫以保證working tree處於未修改狀態
完成
至此已將自己fork的next主題當成subtree新增到專案中
3. 推送next中的修改
其實對整個專案的pull、push同樣會對子專案起作用(比較推薦),這裡記錄一下單獨對next子專案進行pull、push操作
我們將目錄中的next/_config.yml替換為之前備份好的,然後執行下面命令推送到遠端倉庫

# 將修改的檔案commit到本地倉庫
$ git commit -a -m '更新備份的_config.yml檔案'

# git subtree push --prefix=<子目錄名> <遠端分支名> 分支
$ git subtree push --prefix=themes/next next master  

# git subtree pull --prefix=<子目錄名> <遠端分支名> 分支
$ git subtree pull --prefix=themes/yilia yilia master  --squash
複製程式碼

此時可以看到fork的next倉庫更新了

更新完成

方案三: submodule

沒有實踐過,但是從網上subtree和submodule的對比來看,似乎subtree完勝submodule,因此如果有願意踩坑的小夥伴可以自行嘗試。

相關文章