爱库录 目录即站点,文件即文章

Git工作流

2026-09-17 · 使用教程 · 返回列表

title: "Git 工作流:用版本管理打理你的博客内容" date: 2026-09-17 tags: [Git, 版本管理, 工作流, 教程] category: 使用教程 description: "用 Git 管理博客内容:版本历史、多人协作、自动部署、回滚。把博客当作代码仓库来管理。"

Git 工作流:用版本管理打理你的博客内容

如果你是程序员,Git 已经是日常工具了。把博客内容也放进 Git,能获得:

  • 版本历史 — 谁改了什么、什么时候改的、改了哪些内容
  • 协作能力 — 多人同时编辑,合并冲突
  • 自动部署 — push 后自动更新博客
  • 回滚能力 — 改坏了?一键回到上一个版本

第 1 步:初始化仓库

cd /opt/aiklog/blog
git init
git remote add origin git@github.com:yourname/my-blog.git

.gitignore

# 系统文件
.DS_Store
Thumbs.db

# 编辑器
*.swp
*.swo
*~

# 临时文件
*.tmp
drafts/

首次提交

git add .
git commit -m "init: blog content"
git push -u origin main

第 2 步:日常使用

添加新文章

# 写好文章后
git add 技术/新文章.md
git commit -m "add: 新文章标题"
git push

修改文章

# 编辑文章后
git add -u  # 只提交修改过的文件
git commit -m "update: 修改了xxx部分"
git push

删除文章(下线)

git rm 技术/旧文章.md
git commit -m "remove: 下线旧文章"
git push

移动文章(改分类)

git mv 技术/文章.md 读书/文章.md
git commit -m "move: 从技术移到读书"
git push

第 3 步:查看历史

# 查看提交日志
git log --oneline
# a1b2c3d update: 修改了docker文章
# e4f5g6h add: 新文章标题
# i7j8k9l init: blog content

# 查看某篇文章的历史
git log --oneline -- 技术/Docker多阶段构建实战.md

# 查看某次修改的具体内容
git show a1b2c3d

# 对比两个版本的差异
git diff HEAD~3..HEAD -- 技术/

# 查看某篇文章的所有修改
git log -p -- 技术/Docker多阶段构建实战.md

第 4 步:自动部署

push 到 Git 后,自动同步到爱库录的博客目录。

方案一:Git hook(同一台机器)

# 创建 bare 仓库(服务器端)
git init --bare /opt/aiklog/blog.git

# 配置 post-receive hook
cat > /opt/aiklog/blog.git/hooks/post-receive << 'EOF'
#!/bin/bash
GIT_WORK_TREE=/opt/aiklog/blog git checkout -f
EOF
chmod +x /opt/aiklog/blog.git/hooks/post-receive

# 本地仓库推送到 bare 仓库
cd ~/my-blog
git remote add deploy /opt/aiklog/blog.git
git push deploy main

效果: git push deploy main 后,文章自动同步到博客目录。

方案二:GitHub Actions(远程部署)

# .github/workflows/deploy.yml
name: Deploy Blog
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Deploy to server
        uses: easingthemes/ssh-deploy@main
        with:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
          REMOTE_HOST: ${{ secrets.HOST }}
          REMOTE_USER: ${{ secrets.USER }}
          SOURCE: "./"
          TARGET: "/opt/aiklog/blog/"

配置 GitHub Secrets:

  • SSH_KEY — 服务器 SSH 私钥
  • HOST — 服务器 IP
  • USER — SSH 用户名

效果: push 到 GitHub,自动部署到服务器。

方案三:Webhook

爱库录支持 webhook 触发更新:

# 在 Git 服务商(GitHub/Gitea/GitLab)配置 webhook
# URL: https://your.com/api/v1/webhook/git
# Secret: 你的 webhook 密钥
# Events: push

效果: push 后 Git 服务商通知爱库录,爱库录自动 pull 最新内容。

第 5 步:回滚

回滚某篇文章

# 查看某篇文章的历史
git log --oneline -- 技术/某文章.md
# a1b2c3d update: 修改了第三部分
# e4f5g6h add: 初始版本

# 回滚到某个版本
git checkout e4f5g6h -- 技术/某文章.md
git commit -m "revert: 回滚某文章到初始版本"
git push

回滚整个博客

# 查看历史
git log --oneline

# 回滚到某个提交
git revert HEAD
git push

# 或者直接重置(危险!会丢失之后的所有修改)
git reset --hard e4f5g6h
git push --force

协作工作流

多人维护同一个博客时,用分支工作流:

# 创建分支
git checkout -b alice/new-article

# 写文章
# ...

# 提交
git add .
git commit -m "add: alice 的新文章"
git push -u origin alice/new-article

# 发起 Pull Request / Merge Request
# 管理员审核后合并到 main
# 自动部署

每个贡献者一个分支,主分支保持稳定。

分支策略

main          ← 生产环境,自动部署
├── alice/    ← alice 的工作分支
├── bob/      ← bob 的工作分支
└── drafts/   ← 草稿分支
  • main 分支始终是博客的当前状态
  • 个人分支用于写作和编辑
  • drafts 分支存放未完成的文章
  • 合并到 main = 发布

常见问题

Q:文章太大怎么办? A:Markdown 文件通常很小(几 KB)。即使有图片,也可以用 Git LFS 管理大文件。

Q:二进制文件(图片)放 Git 吗? A:建议图片用图床(S3、OSS、Cloudflare R2),Git 里只存 Markdown。如果一定要放 Git,用 Git LFS。

Q:冲突怎么解决? A:Markdown 文件的冲突通常很容易解决——手动编辑冲突标记,保留两边的内容。


相关:[[用文件管理器管理博客]] — 了解文件管理的其他方式。[[Obsidian + 爱库录:笔记变博客的完整工作流]] — Obsidian 用户的工作流。