本文只是给相似我这样的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代理。