前情提要
由于非常猪鼻的我之前一直是 vscode
写博客加winSCP
手动传输数据到服务器,博客推送和撰写效率十分低下,文章少还好说,现在一套流程走下来麻烦的我想扇自己一巴掌,所以搞了一套更好更方便的自动化流程来爱护我的hugo博客和身心健康,并且学习了一下obsidian的文章笔记撰写使用,下面给大家介绍一下方法
搭配脚本实现git自动化推送
服务器端
ssh密钥配置
Windows端
通常保存在C:\Users\用户名\.ssh
中,没有的话自行创建
ssh-keygen -t rsa -b 4096
并提取出id_rsa.pub
文件中的公钥
然后我们到服务器端
然后测试一下
ssh -T 用户名@xxx.xxx.xxx.xxx
,如果出现Welcome to GitLab, 用户名!
或其他类似的成功信息,则说明连接成功
Linux端
操作类似,
先查看是否存在公钥ls ~/.ssh/
,没有的话使用ssh-keygen -t rsa -b 4096
生成公钥,其余于上述类似
创建和配置git用户
- 创建git用户
sudo useradd -m git
- 配置git用户
vim /etc/passwd
在其中找到git用户,修改/bin/bash为/usr/bin/git-shell(即你git-shell的位置)
sudo passwd git
设置git用户密码,如有需要
创建git仓库
1
2
|
mkdir /home/repo
cd /home/repo
|
1
2
|
# nan0in27_site.git为仓库名称,尽量按你博客来修改比较好
git init --bare nan0in27_site.git
|
1
2
|
cd nan0in27_site.git/hooks
vim post-update
|
我输入的内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/bash
# 设置源仓库和目标目录
REPO_DIR="/home/repo/nan0in27_site.git"
PUBLIC_DIR="/home/public"
# 记录日志
echo "Post-update hook triggered at $(date)" >> /home/repo/post-update.log
# 拉取最新的远程内容
git -C $REPO_DIR fetch
# 将 Git 仓库中的内容拉取到目标目录
GIT_WORK_TREE=$PUBLIC_DIR git checkout -f
# 记录日志
echo "Files copied to $PUBLIC_DIR" >> /home/repo/post-update.log
|
权限和文件修改
1
2
3
|
chmod +x post-update
sudo chmod 644 /home/repo/post-update.log
sudo chmod -R 755 /home/public # 这个根据你的实际情况修改,这个是我的博客根目录
|
1
2
|
chown -R git:git nan0in27_site.git
chown -R git:git /home/public
|
用户端
类似github的操作,在我们想要放仓库的地方打开git bash,然后输入
1
|
git clone git@服务器IP地址:/home/repo/nan0in27_site.git
|
脚本实现推送自动化
我在根目录下创建了一个deploy.s
文件,内容如下
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
|
#!/bin/bash
# 设置博客生成目录和目标仓库路径
HUGO_PUBLIC_DIR="/d/blog/nan0in_blog/nan0in27/public"
REPO_DIR="/d/blog/nan0in_blog/nan0in27/nan0in27_site"
# 生成 Hugo 静态文件
cd /d/blog/nan0in_blog/nan0in27 # 确保你在 Hugo 项目目录
hugo
# 复制 public 目录中的文件到 nan0in27_site 仓库
echo "Copying files from Hugo public directory to nan0in27_site..."
cp -r $HUGO_PUBLIC_DIR/* $REPO_DIR/
# 进入 nan0in27_site 仓库
cd $REPO_DIR
# 确保你在正确的 Git 仓库目录下
if [ -d ".git" ]; then
# 添加所有更改的文件到 Git
git add .
# 提交更改
git commit -m "Update site content"
# 推送到远程仓库
git push origin master
else
echo "Error: Not a Git repository. Please check your repository configuration."
exit 1
fi
|
然后我们就可以愉快的在git bash里使用./deploy.sh
实现博客推送自动化了
Obsidian便利自动化博客撰写
暂时懒得写,之后会传