本文只是給相似我這樣的git新人作參考,對git比較熟悉的話能夠無視了。因爲自身對git的瞭解就不是特別深,因此可能有些地方會有錯誤,歡迎各位指正。(本文有在微博上接受geekrainy的幫助,對此表示謝意)
ps:建議git相關操做都在bash上進行操做。不依賴windows下guigit
單位和家裏兩PC,同時都想更新blog。而因爲hexo沒有後臺,並且所有文件都在本地生成,因此若是公司電腦上發表了A文章後回家又寫了篇B文章,在家裏上傳後你會發現只有B文章而A文章沒了(由於家裏的PC上沒有A文章的md文件),因此多臺電腦同時用來寫文章的時候,須要解決備份問題。
<!-- more -->
而經常使用的備份方案無非兩種:github
(不清楚Dropbox,僅以百度云爲例)
優勢:免費且操做簡單
不足:shell
備份後同步比較麻煩,每次另外一臺電腦上都須要手動下載備份文件夾手動覆蓋。json
開啓雲端自動備份的時候,寫blog的過程當中若是保存了文件,會觸發百度雲的上傳,而上傳過程當中產生的xxx.cfg
文件會讓hexo解析失敗,致使hexo s
生成的本地服務器進程中止,不方便邊寫邊預覽windows
所以此方案做廢緩存
優勢:部署完成後更新方便,hexo 更新完後只須要再更新全站到git便可
缺點:部署過程相對比較麻煩,對新手不友好(實際上是因爲對git的理解不深致使的)
國內外如今知名的git服務提供商主要有:
github、gitcafe、bitbucket、oschina、coding等bash
因爲blog文件夾裏有些插件配置文件會涉及比較敏感的隱私數據(雲服務商的appsecret key之類的),因此建議放私有倉庫(固然也能夠把配置文件單獨拿出來而後其他的所有扔到git的公衆倉庫,這個看人,本文重點也不在於git服務商的選擇或者公有私有庫之爭)
上面說起的5家服務商裏,github
、gitcafe
的私有庫是收費的,而另外三家的私有庫目前免費。各位能夠自行選擇,我我的選擇了oschina服務器
git多網站多帳戶部署過程能夠參考git多網站ssh部署方案hexo
這個操做建議在blog進度最新的PC上進行的,不然後面解決衝突會比較麻煩
在osc上添加公鑰,創建新respo等過程略過不講。app
刪除文件夾內原有的.git
緩存文件夾並編輯.gitignore
文件
有些插件或者主題是git上下過來安裝的話,每一個文件夾下都會有對應的.git
文件夾,記得先刪掉,不然會和blog倉庫衝突
(.git
默認是隱藏文件夾,須要先開啓顯示隱藏文件夾。##.git
文件夾被刪除後整個文件對應的git倉庫狀態也會被清空##)
.gitignore
文件做用是聲明不被git記錄的文件,blog根目錄下的.gitignore
是hexo初始化帶來的,能夠先刪除或者直接編輯,對hexo不會有影響。建議.gitignore
內添加如下內容:
/.deploy_git /public /_config.yml
.deploy_git
是hexo默認的.git配置文件夾,不須要同步
public
內文件是根據source
文件夾內容自動生成,不須要備份,否則每次改動內容太多
即便是私有倉庫,除去在線服務商員工能夠看到的風險外,還有云服務商被攻擊形成泄漏等可能,因此不建議將配置文件傳上去
初始化倉庫
blog根目錄下執行如下代碼:
git init git remote add origin <server>
<server>
是指在線倉庫的地址。origin
是本地分支,remote add
操做會將本地倉庫映射到雲端
添加本地文件到倉庫並同步到git上
git add . #添加blog目錄下全部文件,注意有個`.`(`.gitignore`聲明過的文件不包含在內) git commit -m "first commit" #添加更新說明 git push -u origin master #推送更新到雲端服務器
在執行這步以前必定要注意檢查下
.gitignore
文件的內容,看看是否正確的把一些文件夾忽略掉了。若是加錯了的話能夠用
git rm -r --cached .
撤銷添加操做。
到這裏的時候,雲端備份已經完成
假設以前將A電腦裏的內容備份到git了,如今B電腦準備同步內容。
git init git remote add origin <server> #將本地文件和雲端倉庫映射起來。這步不能夠跳過 git fetch --all git reset --hard origin/master
fetch
是將雲端全部內容拉取下來。reset
則是不作任何合併處理,強制將本地內容指向剛剛同步下來的雲端內容(正常pull的話須要考慮很多衝突的問題,比較麻煩。)
假設在B電腦上寫完了文章,也hexo d -g
發佈完了,這時候須要將新文章的md文件更新上去。(其實就是提交更新給git,會的能夠無視了)
同一個bash界面下:
git add .
這時候能夠用
git status
查看狀態,通常會顯示剛剛更改過的文件狀態。如:
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: db.json new file: source/_posts/test.md
上面的輸出狀態即說明'db.json'文件作了更改,
source/_posts
目錄下新增了'test.md'文件。
而後對更改添加說明並推送到遠程倉庫.
git commit -m '更新信息' git push
當顯示相似以下提示的時候,即表示備份成功
To git@git.oschina.net:xxxx/blog-backup.git + 2c77e1e...5616bc6 master -> master (forced update)
再到A電腦上的時候,只須要
git pull
便可同步更新
因爲某些衆所周知的緣故,因此github時不時的有時候速度會很慢,這種狀況下本地代理就派上用場了。
這裏以給git的SSH傳輸方式配置本地SS代理爲例說下配置過程:
打開~/.ssh/config
文件。
在Host github *.github.com
下添加如下字段:
Proxycommand ssh -S 127.0.0.1:1080 %h %p
測試鏈接
保存退出後重啓git bash。
輸入ssh -vT git@github.com
,當返回Hi username! You've successfully authenticated, but GitHub does not provide shell access.
的時候即說明配置成功以後github的全部流量都會走本地的ss代理。