Hexo 3.1.1 静态博客搭建指南
Hexo 是一个基于 Node.js 的静态博客程序,可以方便的生成静态网页托管在 GitHub 和 Heroku 上。作者是来自台湾的 tommy351。
GitHub Pages 本来用于托管在 GitHub 上的项目作介绍,后来被不少开发者用来搭建博客,官方也表示欢迎该行为,并提供了 300M 的免费空间。
优势:
- 生成静态页面快
- 支持 Markdown
- 兼容 Windows, mac OS 和 Linux
- 部署方便,日常使用仅需五个命令
- 高扩展性、自订性,文件少、小,易理解
⚠️ 注意:本文适用于 hexo 3.x 版本,与 2.x 略有出入!
配置 SSH
使用 Hexo 博客必须配置 SSH。
打开 Terminal(终端,Windows 用户请安装 GitHub Desktop 后打开 Git bash,效果等同) ,输入 cd ~/.ssh
,如果果提示:No such file or directory
说明未配置 SSH。
本地生成密钥对
ssh-keygen -t rsa -C "你的邮件地址"
,注意命令中的大小写不要搞混。按提示指定保存文件夹,不设置密码。添加公钥到 GitHub
- 根据上一步的提示,找到公钥文件(默认为 id_rsa.pub),用记事本打开,全选并复制。
- 登录 GitHub,右上角 头像 ->
Settings
—>SSH keys and GPG keys
—>New SSK key
。把公钥粘贴到 Key 中,任意填好 Title 并点击 Add SSH key。 - Terminal 中输入命令
ssh -T git@github.com
,选 yes,等待片刻可看到成功提示。
修改本地的 ssh remote url,不用 HTTPS 协议,改用 Git 协议
- GitHub 仓库中获取 ssh 协议相应的 url
- 本地仓库执行命令
git remote set-url origin SSH
对应的url
,配置完后可用git remote -v
查看结果
这样 git push
或 hexo d
时不再需要输入账号密码。
搭建博客
注: 以下命令行需要在 Terminal 终端中执行(Windows 使用 Git bash
)。
安装 Git:下载安装后,注册 GitHub 账号并配置 Git 和 SSH 公私钥
安装 Node.js
安装 Hexo:
npm install -g hexo
,可用hexo -v
查看版本。这里我用的是 3.1.1。创建 Hexo 文件夹:新建放置博客的文件夹,进入并执行命令
hexo init
。hexo 会在目标文件夹建立网站所需要的所有文件。安装依赖包:
npm install
创建 GitHub Repository:Repository 名字必须是
你的 GitHub 名.GitHub.io
,比如我是iTofu.github.io
部署:打开博客根目录下的
_config.yml
文件,末尾添加如下信息:1
2
3
4deploy:
type: git
repository: # 你的 GitHub 仓库地址,别忘了加上 .git
branch: master然后执行命令:
1
2hexo generate # 生成静态页面,可以简化为 hexo g
hexo deploy # 部署到 GitHub,可以简化为 hexo d
浏览器访问 iTofu.github.io
就能看到自己的 Blog 了,一般延迟半分钟左右才能看到效果。一开始看到 404 页面不要惊慌,耐心等等。
手打党请注意,配置文件的冒号后必须有一个空格。
如果报错:
1 | Deployer not found:git |
运行命令:
1 | npm install hexo-deployer-git --save |
Hexo 使用
生成静态页面
1 | hexo generate # 简化:hexo g |
本地启动
1 | hexo server # 简化:hexo s |
浏览器输入 localhost:4000
就可以看到效果。当你修改了文章或配置文件时,保存文件再刷新浏览器就能看到修改后的效果,非常方便。
新建文章
1 | hexo new post "title" # 新文章路径:\source\_posts\title.md,简化:hexo n 'title' |
新建页面
1 | hexo new page "title" |
post、page 等可以改成其他 layout,可用 layout 在 scaffolds 目录下查看。在同目录下创建文件来添加自己的 layout,也可以编辑现有的 layout,比如 post 的 layout 默认是 \scaffolds\post.md
。
编辑文章
打开新建的文章 \source\_posts\title.md
:
1 | title: HelloWorld! # 文章页面上的显示名称,可以任意修改,不影响文章的 URL |
多级分类语法格式:(标签也可以用类似的写法)
1 | # 第一种 |
首页文章预览添加图片:
1 | photos: |
正文中可以使用 <!--more-->
设置文章摘要 如下:
1 | # 以上显示在摘要中 |
more 以上内容即是文章摘要,如果设置了主页只显示摘要,则 more 以下内容点击 Read More
链接打开全文才显示。
简单命令
hexo 现在支持更加简单的命令格式了,比如:
1 | hexo g == hexo generate # 生成 |
插入图片
博客中的图片文件可以直接放在 source 文件夹下,部署时上传到 GitHub 仓库中。但是 GitHub 项目容量有限,而且主机在国外,访问速度较慢,把图片放在国内的图床上是个更好的选择。我用的是 七牛云存储
免费用户实名审核之后,可以获取 10GB 永久免费存储空间、每月 10GB 下载流量、每月 10 万次 Put 请求、每月 100 万次 Get 请求,做图床绰绰有余。
注册账号,新建空间,我的新空间名是 blog
,专门用来放置博客上引用的资源。
进入空间后点击「内容管理」,再点击「上传」:
七牛空间没有文件夹的概念,但是允许为文件添加带斜杠/
的前缀,用来给资源分类。这里原作者设置前缀为img/Hexo 3.1.1 静态博客搭建指南/
。上传了一张图片:
在右侧可以找到外链,复制地址:
Markdown 插入图片的语法为:
1 | ![图片描述,可选](图片链接,必填) |
上传图片 -> 获取外链 -> 写入 Markdown,就这么简单!
由于七牛防盗链的白名单无法添加 localhost
,暂时不设置防盗链,否则 hexo s
调试的时候,看不到图片。
以上操作每插入一张图片就要做一次,相当繁琐,于是写了个脚本简化,详见这篇文章《拖曳文件上传到七牛的Python脚本》
配置博客
全站配置
注意: 文件中配置项的冒号后面必须加空格,否则报错
下面有些选项要配置后文的插件才有效,文件中已注明。
- 整站的配置:博客根目录下的
\_config.yml
文件。这是我的配置文件:
1 | # Hexo Configuration |
更换主题
默认主题太丑,我们来换成 NexT 主题。
- 安装:在博客根目录下执行
git clone https://GitHub.com/iissnan/hexo-theme-next.git themes/next
- 启用:修改博客根目录下的
_config.yml
配置文件中的theme
属性,将其设置为next
- 更新:在
themes/next
目录下执行git pull
(暂时不需要) \themes\next\_config.yml
修改主题配置
我的 _config.yml
文件(值为 ***
的内容需要填你自己的):
1 | # --------------------------------------------------------------- |
个性化设置
先按照 NexT 使用文档 设置一下,其中的内容下面不再赘述。
sitemap 插件
谷歌与百度的站点地图,前者适用于其他搜索引擎,用来手动提交以增加收录
安装:
1 | npm install hexo-generator-sitemap --save |
_config.yml
添加代码(如果没有的话,上文已添加了其实):
1 | sitemap: |
另外谷歌的 sitemap.xml
可以不写到配置文件中,自动生效。
在主页后面加 /baidusitemap.xml
可以看到 baidusitemap(谷歌同理),将该网址它提交给百度搜索:百度站长平台,贴吧账号无法在这里使用。
不过由于 GitHub 禁止了百度爬虫,百度无法抓取其中的 URL。试了各种解决方案都没有成功,除非把博客托管到其他平台上。建议还是使用 谷歌分析(Google Analysis)。
添加新 Page
用如下命令添加新 page
1 | hexo new page "lol" |
然后在主题配置文件 \themes\next\_config.yml
添加(上文已添加):
1 | menu: |
打开 \themes\next\languages\zh-Hans.yml
,这是简体中文的配置文件,如果你的博客用的是其他语言,请打开对应的文件。
1 | menu: |
注意这里第一列必须全为小写,否则效果类似这样:
设置完后效果如下:
替换字体库网址
使用中发现网站打开速度巨慢,一开始以为是 GitHub 的原因,但是本地调试时也要一分钟才能打开。使用Chrome抓包发现:
57.04 秒!
在 \themes\next
目录执行命令
1 | grep 'css?family' -r ./ |
可以找到罪魁祸首就在 \themes\next\layout\_partials\head.swig
文件中:
1 | {% if theme.use_font_lato %} |
作者的原意是想让语言设置为简体的用户都连接到中国科技大学的免费字体库,其他用户链接到 Google,没想到这个链接挂了。使用 Ping检测工具 可以看到 fonts.googleapis.com
被解析到了北京的服务器,速度相当快,所以我们直接使用 Google 的字体库就可以了:
1 | {% if theme.use_font_lato %} |
修改底栏
如果你很追求个性化,你可以自定义底栏,以下是我修改后的底栏代码:
1 | <div class="copyright" > |
设置之后的底栏效果请翻到本文底部查看,然后你可以点击左上角目录返回回来。
标题下添加「阅读量」
效果:
embed.js 本地化
使用 Chrome 抓包可以得到多说评论核心脚本 embed.js 的远程文件地址:
1 | http://static.duoshuo.com/embed.js |
在浏览器中打开,右键另存为,放到 \theme\next\source\js\
文件夹中。
再打开 \themes\next\layout\_scripts\comments\duoshuo.swig
。搜索 //static.duoshuo.com/embed.js
,把它改成 /js/embed.js
。
如法炮制,把加载慢的 .js 都本地化。目前GitHub的响应速度非常快。
其他处理的 js 有:
\themes\next\layout\_partials\searchswiftype.swig
中的1
//s.swiftypecdn.com/install/v2/st.js
美化多说评论
添加浏览器、操作系统信息
博客中找一条自己的留言,获取多说id:
修改
embed.js
,也可以直接下载原作者的 embed.js。
打开上一步本地化的 embed.js
,在最顶部添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136//管理员判断开始
function sskadmin(e) {
var ssk = '';
if (e.user_id == 14198272) {
if (checkMobile()) {
ssk = '<span class="ua"><span class="sskadmin">博主</span></span><br><br>';
} else {
ssk = '<span class="ua"><span class="sskadmin">博主</span></span>';
}
} else {
if (checkMobile()) {
ssk = '<br><br>';
}
}
return ssk;
}
//管理员判断结束
//移动客户端判断开始
function checkMobile() {
var isiPad = navigator.userAgent.match(/iPad/i) != null;
if (isiPad) {
return false;
}
var isMobile = navigator.userAgent.match(/iphone|android|phone|mobile|wap|netfront|x11|java|opera mobi|opera mini|ucweb|windows ce|symbian|symbianos|series|webos|sony|blackberry|dopod|nokia|samsung|palmsource|xda|pieplus|meizu|midp|cldc|motorola|foma|docomo|up.browser|up.link|blazer|helio|hosin|huawei|novarra|coolpad|webos|techfaith|palmsource|alcatel|amoi|ktouch|nexian|ericsson|philips|sagem|wellcom|bunjalloo|maui|smartphone|iemobile|spice|bird|zte-|longcos|pantech|gionee|portalmmm|jig browser|hiptop|benq|haier|^lct|320x320|240x320|176x220/i) != null;
if (isMobile) {
return true;
}
return false;
}
//移动客户端判断结束
//显UA开始
function ua(e) {
var r = new Array;
var outputer = '';
if (r = e.match(/FireFox\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_firefox"><i class="fa fa-firefox"></i> FireFox'
} else if (r = e.match(/Maxthon([\d]*)\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_maxthon"><i class="fa fa-globe"></i> Maxthon'
} else if (r = e.match(/BIDUBrowser([\d]*)\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> 百度浏览器'
} else if (r = e.match(/UBrowser([\d]*)\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> UCBrowser'
} else if (r = e.match(/UCBrowser([\d]*)\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_ucweb"><i class="fa fa-globe"></i> UCBrowser'
} else if (r = e.match(/MetaSr/ig)) {
outputer = '<span class="ua_sogou"><i class="fa fa-globe"></i> 搜狗浏览器'
} else if (r = e.match(/2345Explorer/ig)) {
outputer = '<span class="ua_2345explorer"><i class="fa fa-globe"></i> 2345王牌浏览器'
} else if (r = e.match(/2345chrome/ig)) {
outputer = '<span class="ua_2345chrome"><i class="fa fa-globe"></i> 2345加速浏览器'
} else if (r = e.match(/LBBROWSER/ig)) {
outputer = '<span class="ua_lbbrowser"><i class="fa fa-globe"></i> 猎豹安全浏览器'
} else if (r = e.match(/MicroMessenger\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_qq"><i class="fa fa-weixin"></i> 微信'
/*.split('/')[0]*/
} else if (r = e.match(/QQBrowser\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_qq"><i class="fa fa-qq"></i> QQ浏览器'
/*.split('/')[0]*/
} else if (r = e.match(/QQ\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_qq"><i class="fa fa-qq"></i> QQ浏览器'
/*.split('/')[0]*/
} else if (r = e.match(/MiuiBrowser\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_mi"><i class="fa fa-globe"></i> Miui浏览器'
/*.split('/')[0]*/
} else if (r = e.match(/Chrome([\d]*)\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_chrome"><i class="fa fa-chrome"></i> Chrome'
/*.split('.')[0]*/
} else if (r = e.match(/safari\/([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_apple"><i class="fa fa-safari"></i> Safari'
} else if (r = e.match(/Opera[\s|\/]([^\s]+)/ig)) {
var r1 = r[0].split("/");
outputer = '<span class="ua_opera"><i class="fa fa-opera"></i> Opera'
} else if (r = e.match(/Trident\/7.0/gi)) {
outputer = '<span class="ua_ie"><i class="fa fa-internet-explorer"></i> IE 11'
} else if (r = e.match(/MSIE\s([^\s|;]+)/gi)) {
outputer = '<span class="ua_ie"><i class="fa fa-internet-explorer"></i> IE' + ' ' + r[0]
/*.replace('MSIE', '').split('.')[0]*/
} else {
outputer = '<span class="ua_other"><i class="fa fa-globe"></i> 其它浏览器'
}
if (checkMobile()) {
Mobile = '<br><br>';
} else {
Mobile = '';
}
return outputer + "</span>" + Mobile;
}
function os(e) {
var os = '';
if (e.match(/win/ig)) {
if (e.match(/nt 5.1/ig)) {
os = '<span class="os_xp"><i class="fa fa-windows"></i> Windows XP'
} else if (e.match(/nt 6.1/ig)) {
os = '<span class="os_7"><i class="fa fa-windows"></i> Windows 7'
} else if (e.match(/nt 6.2/ig)) {
os = '<span class="os_8"><i class="fa fa-windows"></i> Windows 8'
} else if (e.match(/nt 6.3/ig)) {
os = '<span class="os_8_1"><i class="fa fa-windows"></i> Windows 8.1'
} else if (e.match(/nt 10.0/ig)) {
os = '<span class="os_8_1"><i class="fa fa-windows"></i> Windows 10'
} else if (e.match(/nt 6.0/ig)) {
os = '<span class="os_vista"><i class="fa fa-windows"></i> Windows Vista'
} else if (e.match(/nt 5/ig)) {
os = '<span class="os_2000"><i class="fa fa-windows"></i> Windows 2000'
} else {
os = '<span class="os_windows"><i class="fa fa-windows"></i> Windows'
}
} else if (e.match(/android/ig)) {
os = '<span class="os_android"><i class="fa fa-android"></i> Android'
} else if (e.match(/ubuntu/ig)) {
os = '<span class="os_ubuntu"><i class="fa fa-desktop"></i> Ubuntu'
} else if (e.match(/linux/ig)) {
os = '<span class="os_linux"><i class="fa fa-linux"></i> Linux'
} else if (e.match(/mac/ig)) {
os = '<span class="os_mac"><i class="fa fa-apple"></i> Mac OS X'
} else if (e.match(/unix/ig)) {
os = '<span class="os_unix"><i class="fa fa-desktop"></i> Unix'
} else if (e.match(/symbian/ig)) {
os = '<span class="os_nokia"><i class="fa fa-mobile"></i> Nokia SymbianOS'
} else {
os = '<span class="os_other"><i class="fa fa-desktop"></i> 其它操作系统'
}
return os + "</span>";
}
//显UA结束
然后搜索:
1
data-qqt-account="' + (r.qqt_account || "") + '">' + u(r.name) + "</span>"),
在后面添加:
1
t += sskadmin(s.author) + "<span class=\"ua\">" + ua(s.agent) + "</span><span class=\"ua\">" + os(s.agent) + "</span>",
- 添加对应 CSS。打开
\themes\next\source\css\main.styl
,在文件开头插入代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147/*博主标记 CSS开始*/
.sskadmin {
background-color: #00a67c ;
border-color: #01B171 ;
border-radius: 4px;
padding: 0 5px ;
opacity: 1;
}
/*博主标记 CSS结束*/
/*多说UA开始*/
span.ua{
margin: 0 1px ;
color:#FFFFFF ;
/*text-transform: Capitalize!important;
float: right!important;
line-height: 18px!important;*/
}
.ua_other.os_other{
background-color: #ccc ;
color: #fff;
border: 1px solid #BBB ;
border-radius: 4px;
}
.ua_ie{
background-color: #428bca ;
border-color: #357ebd ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_firefox{
background-color: #f0ad4e ;
border-color: #eea236 ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_maxthon{
background-color: #7373B9 ;
border-color: #7373B9 ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_ucweb{
background-color: #FF740F ;
border-color: #d43f3a ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_sogou{
background-color: #78ACE9 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_2345explorer{
background-color: #2478B8 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_2345chrome{
background-color: #F9D024 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_mi{
background-color: #FF4A00 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_lbbrowser{
background-color: #FC9D2E ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_chrome{
background-color: #EE6252 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_qq{
background-color: #3D88A8 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_apple{
background-color: #E95620 ;
border-color: #4cae4c ;
border-radius: 4px;
padding: 0 5px ;
}
.ua_opera{
background-color: #d9534f ;
border-color: #d43f3a ;
border-radius: 4px;
padding: 0 5px ;
}
.os_vista,.os_2000,.os_windows,.os_xp,.os_7,.os_8,.os_8_1 {
background-color: #39b3d7 ;
border-color: #46b8da ;
border-radius: 4px;
padding: 0 5px ;
}
.os_android {
background-color: #98C13D ;
border-color: #01B171 ;
border-radius: 4px;
padding: 0 5px ;
}
.os_ubuntu{
background-color: #DD4814 ;
border-color: #01B171 ;
border-radius: 4px;
padding: 0 5px ;
}
.os_linux {
background-color: #3A3A3A ;
border-color: #1F1F1F ;
border-radius: 4px;
padding: 0 5px ;
}
.os_mac{
background-color: #666666 ;
border-color: #1F1F1F ;
border-radius: 4px;
padding: 0 5px ;
}
.os_unix{
background-color: #006600 ;
border-color: #1F1F1F ;
border-radius: 4px;
padding: 0 5px ;
}
.os_nokia{
background-color: #014485 ;
border-color: #1F1F1F ;
border-radius: 4px;
padding: 0 5px ;
}
/*多说UA结束*/
效果:
动感头像
效果和CSS代码见 多说自定义CSS 让你的多说评论动感起来
然后打开多说后台,按下图操作,把代码粘贴进去
大功告成。
原作者还添加了网上搜集的其他代码,详见注释:
1 | /*头像样式 圆形,鼠标移上会旋转*/ |
SEO 优化
更改首页标题格式为「关键词-网站名称 - 网站描述」。打开 \themes\next\layout\index.swig
文件,找到这行代码:
1 | {% block title %} {{ config.title }} {% endblock %} |
把它改成:
1 | {% block title %} |
项目主页添加 README
GitHub 上博客的仓库主页空荡荡的,没有 README。如果把 README.md 放入 source 文件夹,hexo g
生成时会被解析成 html 文件,放到 public 文件夹,生成时又会自动删除。
解决方法很简单,在 source 目录下新建文件README.mdown
,在里面写README即可。hexo g
会把它复制到 public 文件夹,且不会被解析成 html
Git 相关
自动备份博客源文件
多 PC 同步
需要在公司和家里电脑上写博客,打包拷来拷去太麻烦。原作者使用 Coding.net 的免费私有仓库来同步 hexo 文件夹。
删除根目录和
\theme\next\
下的.git
文件夹。修改根目录下的
.gitignore
文件为:
1 | /.deploy_git |
其实第一行留不留都一样,它是 hexo 默认的 git 配置文件夹,里面也有一个 .git
,使 /.deploy_git
里的文件无法被提交。public
是每次 hexo g
新生成的静态博客文件,不需要同步。
- push & pull
如果没接触过 Git,可以看这本书学习一个:《Pro Git》
Pull 失败:Filename too long
在 Terminal 里面,输入
1 | git config --global core.longpaths true |
关闭换行符警告
部署时会出现如下警告
1 | warning: LF will be replaced by CRLF |
LF 为换行符,CR 为回车符。Windows 结束一行用 CRLF,Mac 和 Linux 用 LF。Git 默认在你提交时自动地把行结束符 CRLF 转换成 LF,而在签出代码时把 LF 转换成 CRLF。
要关闭警告,执行如下命令:
1 | git config --global core.autocrlf false |
上述命令中:
false 表示取消自动转换功能。适合纯 Windows
true 表示提交代码时把 CRLF 转换成 LF,签出时 LF 转换成 CRLF。适合多平台协作
input 表示提交时把 CRLF 转换成 LF,签出时不转换。适合纯 Linux 或 Mac
补充:
Git 还提供了一个换行符检查功能 core.safecrlf
,可以在提交时检查文件是否混用了不同风格的换行符。可以用同样的命令更改设置。
选项如下:
false - 不做任何检查
warn - 在提交时检查并警告
true - 在提交时检查,如果发现混用则拒绝提交
建议使用最严格的 true 选项
博客部署的 Message
\node_modules\hexo-deployer-git\lib\deployer.js
文件末尾找到这一句:
1 | Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }}. |
改得个性化一点:
1 | 这个勤奋的家伙又更新了: {{ now(\'YYYY-MM-DD HH:mm:ss\') }}. |
在 GitHub 对应项目中可以看到效果:
参考资料
- hexo系列教程
- hexo你的博客
- pacman主题介绍
- 使用脚本添加“本站已运行 X 天”
- 如何使用 Jacman 主题
- Hexo 3.0 静态博客使用指南
- 不蒜子-搞定你的网站计数
- Breaking Changes in Hexo 3.0
- 美化你的Hexo站点
- git core.autocrlf配置说明
- 利用git解决hexo博客多PC间同步问题
- Hexo博客优化 - Next主题个性化定制
- win下面的git客户端提示FIlename too long解决方法
- 多说自定义CSS动感头像和多说评论显示User Agent的那些小事
- 多说自定义CSS 让你的多说评论动感起来
- 多说样式折腾记录 — 添加 UA 浏览器标识、旋转头像等
本文转自 loveNight,略有删改。
联系
- Mail:
echo bGVvZGF4aWFAZ21haWwuY29tCg== | base64 -D
- GitHub: iTofu