場(chǎng)景
家里電腦和公司電腦,想要更新hexo blog.而hexo blog又沒(méi)有wordpress后臺(tái)可以寫文章,如在家里的電腦發(fā)表了A文章,第二天在公司電腦發(fā)表了B文章膏萧,查看hexo blog你會(huì)發(fā)現(xiàn)只有B文章而沒(méi)有A文章(因?yàn)楣倦娔X的hexo_file/source/_posts/沒(méi)有A文章.md文件),所以多個(gè)電腦想要寫文章蝌衔,需要解決hexo blog數(shù)據(jù)一致性榛泛。
數(shù)據(jù)同步方案
1.Dropbox等網(wǎng)盤同步
優(yōu)點(diǎn):免費(fèi) 操作簡(jiǎn)單
不足:在hexo generate 生成靜態(tài)文件會(huì)觸發(fā)自動(dòng)上傳。
2.Git版本庫(kù)同步
優(yōu)點(diǎn):更新方便
不足:部署過(guò)程相對(duì)比較麻煩噩斟,對(duì)新手不友好曹锨,需要使用git命令
國(guó)內(nèi)外知名的git服務(wù)提供商有:
github、bitbucket剃允、gitlab沛简、coding
由于hexo_blog配置文件涉及敏感的隱私數(shù)據(jù)(如api key),建議放私有倉(cāng)庫(kù)。
免費(fèi)的私有庫(kù)服務(wù)商有coding bitbucket.這里個(gè)人選擇coding
配置過(guò)程
Coding操作
1.注冊(cè)coding帳戶斥废,新建項(xiàng)目 選擇私有倉(cāng)庫(kù)椒楣。
2.coding 添加SSH公鑰操作
https://coding.net/help/doc/git/ssh-key.html#ssh-
上傳hexo blog到git版本庫(kù)
1.刪除文件夾內(nèi)原有的.git緩存文件夾并編輯.gitignore文件
- 有些插件或者主題是git上下過(guò)來(lái)安裝的話,每個(gè)文件夾下都會(huì)有對(duì)應(yīng)的.git 文件夾牡肉,記得先刪掉捧灰,否則會(huì)和blog倉(cāng)庫(kù)沖突
- .git默認(rèn)是隱藏文件夾,需要先開啟顯示隱藏文件夾统锤。##.git文件夾被刪除后整個(gè)文件對(duì)應(yīng)的git倉(cāng)庫(kù)狀態(tài)也會(huì)被清空##
.gitignore
文件作用是聲明不被git記錄的文件凤壁,blog根目錄下的.gitignore是hexo初始化帶來(lái)的吩屹,可以先刪除或者直接編輯跪另,對(duì)hexo不會(huì)有影響拧抖。建議.gitignore內(nèi)添加以下內(nèi)容:
/.deploy_git
/public
/_config.yml
.deploy_git
是hexo默認(rèn)的.git配置文件夾,不需要同步- public內(nèi)文件是根據(jù)source文件夾內(nèi)容自動(dòng)生成免绿,不需要備份唧席,不然每次改動(dòng)內(nèi)容太多
- 即使是私有倉(cāng)庫(kù),除去在線服務(wù)商員工可以看到的風(fēng)險(xiǎn)外嘲驾,還有云服務(wù)商被攻擊造成泄漏等可能淌哟,所以不建議將配置文件傳上去
2.初始化倉(cāng)庫(kù)
hexo blog根目錄下執(zhí)行以下代碼:
git init
git remote add origin <server>
<server>是指在線倉(cāng)庫(kù)的地址。origin是本地分支,remote add操作會(huì)將本地倉(cāng)庫(kù)映射到云端
3.添加本地文件到倉(cāng)庫(kù)并同步到git上
git add . #添加blog目錄下所有文件辽故,注意有個(gè)`.`(`.gitignore`聲明過(guò)的文件不包含在內(nèi))
git commit -m "first commit" #添加更新說(shuō)明
git push -u origin master #推送更新到云端服務(wù)器
在執(zhí)行這步之前一定要注意檢查下.gitignore文件的內(nèi)容徒仓,看看是否正確的把一些文件夾忽略掉了。如果加錯(cuò)了的話可以用
git rm -r --cached .
撤銷添加操作誊垢。
到這里的時(shí)候掉弛,云端同步已經(jīng)完成
將git的內(nèi)容同步到本地
假設(shè)之前將A電腦里的內(nèi)容備份到git了,現(xiàn)在B電腦準(zhǔn)備同步內(nèi)容喂走。
git init
git remote add origin <server>
git fetch --all
git reset --hard origin/master
fetch是將云端所有內(nèi)容拉取下來(lái)殃饿。reset則是不做任何合并處理,強(qiáng)制將本地內(nèi)容指向剛剛同步下來(lái)的云端內(nèi)容(正常pull的話需要考慮不少?zèng)_突的問(wèn)題芋肠,比較麻煩乎芳。)
更新文章后的同步操作
假設(shè)在B電腦上寫完了文章,也hexo d -g
發(fā)布完了帖池,這時(shí)候需要將新文章的md文件更新上去奈惑。(其實(shí)就是提交更新給git,會(huì)的可以無(wú)視了)同一個(gè)bash界面下:
git add .
這時(shí)候可以用git status查看狀態(tài)睡汹,一般會(huì)顯示剛剛更改過(guò)的文件狀態(tài)肴甸。如:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: db.json
new file: source/_posts/test.md
上面的輸出狀態(tài)即說(shuō)明’db.json’文件做了更改,source/_posts目錄下新增了’test.md’文件帮孔。
然后對(duì)更改添加說(shuō)明并推送到遠(yuǎn)程倉(cāng)庫(kù).
git commit -m '更新信息'
git push
當(dāng)顯示類似如下提示的時(shí)候雷滋,即表示同步成功
To https://git.coding.net/sundayle/sundayle_hexo.git
+ 2c37f1e...4687bc6 master -> master (forced update)
再到A電腦上的時(shí)候,只需要
git pull
即可同步更新
git配置sock5代理
由于某些眾所周知的緣故文兢,所以github時(shí)不時(shí)的有時(shí)候速度會(huì)很慢晤斩,這種情況下本地代理就派上用場(chǎng)了。
這里以給git的SSH傳輸方式配置本地SS代理為例說(shuō)下配置過(guò)程:
1.打開~/.ssh/config文件姆坚。
2.在Host github *.github.com下添加以下字段:
Proxycommand ssh -S 127.0.0.1:1080 %h %p
3.測(cè)試連接
保存退出后重啟git bash澳泵。
輸入ssh -vT git@github.com,當(dāng)返回Hi username! You've successfully authenticated, but GitHub does not provide shell access.的時(shí)候即說(shuō)明配置成功
之后github的所有流量都會(huì)走本地的ss代理兼呵。