文章更新
- 20160517-修改了关于在本地hexo目录下安装主题的方法
- 20160518-放弃fetch方式,改用了pull方式
- 20160613-修改了一下新环境下创建HEXO并且pull文章的方式
第一次同步文章MARKDOWN源文件
选用的是 GITHUB 和 CODING.NET 分别作为静态文件在墙外和墙内的两个服务器,coding.net私有库来存放原始posts文件。
以下文章中的电脑A是一台pc,电脑B是一台macos系统的苹果电脑,仅做举例用,多台pc或者mac也是可以的。
电脑A写HEXO推送到仓库
首先,假如自己在电脑A上已经建立好了HEXO,写了一些文章,如何推送到coding.net上呢?
先要去coding.net上建立一个私有库,这里名字默认使用了hexo名字。然后
git init #这句话很重要哦
git remote add [alias] [url] #将本地文件和云端仓库映射起来,这步很重要,这里[url]应该写类如https://git.coding.net/tinyvane/hexo.git这样的远程仓库地址
git add * #将本地修改添加到缓存区
git commit -m '写了几个新帖子'
git push origin master #如果遇到错误,采用git push -f参数,强制上传
好了,电脑A上的工作就完成了。
电脑B进行hexo内容同步
然后切换到电脑B,视这台电脑是否已经事先安装了node.js、cygwin(Windows环境)以及hexo-cli
然后打开bash,执行命令
npm install -g hexo-cli #全局安装
继续,选一个地方执行下述命令
git clone https://git.coding.net/tinyvane/hexo.git hexo #路径和目录自设设定
cd hexo
npm install #根据package.json安装缺少的npm组件
说明:如果执行 git submodule 遇到 already exists in the index 错误,请先执行 git rm --cached themes/next 然后再执行 git submodule add。
上面的步骤可能有一点问题,通过网上的一个帖子《Using Git Submodules to Manage Your Custom Hexo Theme》,如果在另外一台电脑要CLONE一个带SUBMODULE的REPO,需要三条命令
git clone git@git.coding.net:tinyvane/hexo.git
git submodule init
git submodule update
并且,这些操作之前,需要在电脑A上,先使用git add themes/next来把作为HEXO的主题文件夹作为子模块纳入GIT管理,这样themes/next下的文件,也会上传到你的远程仓库中,同时呢,这个子模块还可以借助 submodule update来获得更新,一举两得。
然后开始写文章,更新的时候,执行下面命令
git add .
git commit -m '写了几个新帖子'
git push origin master
这里说一个题外话,这样Push的时候,会问账号和密码,是因为clone repo的时候采用了https而不是ssh方式,详细说明看这里。
需要进入.git目录,修改config文件,
将 url = http://git.coding.net/tinyvane/hexo.git,
修改为 url = git@git.coding.net:tinyvane/hexo.git 即可。
电脑B下载安装主题和其他必备插件
安装hexo-asset-image和模板
首先确认 _config.yml 中有 post_asset_folder:true 。
然后执行
npm install https://github.com/CodeFalling/hexo-asset-image --save #图片插件使用-S 等同于 --save
2016年5月17日更改 修改了之前用#git clone https://github.com/iissnan/hexo-theme-next themes/next的方式
之后每次同步的步骤
如果上面的步骤运行了一次,之后就不用这么费劲了。加入你在两边的电脑上,都同步完了,下次到A电脑上,开始写文章,然后需要做的事情:
git add .
git commit -m 'the articles updates on this machine this time'
git push origin master
更新完成
然后B电脑上写帖子之前,先拉去远程仓库中的文章更新
git pull --all #后来还是使用了这种方式
更新帖子
git add .
git commit -m 'the articles updates on this machine this time'
git push origin master
20160518 修改了之前用git fetch --all + git reset --hard的方式
我因为学git时间不长,很多概念还在慢慢理解中,一直都知道git reset --hard不好,但是具体怎么不好,也说不清楚。
直到看到了stackoverflow上的一个帖子,地址在这里
文章说的情况,就是一般本地代码都是git pull来操作的,安全可靠,但是发生了本地代码和远程仓库有所不同,然后本地的程序员就把自己的代码发给了仓库管理者(暂且这么说吧),让后者来更新,后者更新了远程仓库代码,但是本地程序员,发现Pull就不好用了。所以,提问者的人,想知道否是可以force pull,就是强制用远程代码覆盖本地代码。
答案就是上面说的fetch --all这种方式了,但是这种方式需要配合reset --hard,这样本地所有未提交的commit就会丢失,那么当时这种情况非常适合我这种一个人用git管理hexo博客的情况,但是如果两边同事有人在写代码,那么就不合适了。
所以,在那个帖子的高票答案中,提出了git checkout master分支到另外分支,然后再使用git clone远程仓库的master分支到本地,然后采用合并的方式,这样既可以跟踪最新的远程仓库源代码,同时也不会丢失本地的commit。
这种情况,也让我学习了git checkout的用法。顺便总结一下。
如何更新本地的HEXO
npm update
如何更新主题
目前还是采用在站点目录下,复制个主题下的配置文件,然后全部删掉next主题,然后clone或者submoudle的方式,这种方式很笨,并且还不能自动更新,更详细的,可以学习这个帖子,但是目前精力不够,还无法深入理解,先放着吧。