../主页

我是如何管理我的日记和知识库的

0 需求

0.1 日记

#c 愿景 日记愿景

对于一个写代码的人来说,我追崇电子化,我想把我的东西搬上电脑,而不是依旧使用纸张来记录。

#c 缺点 纸质缺点1

对于纸质日记来说,虽然可以通过自己手写或者装饰来定制自己的个性化日记,但是此类方法需要有一定的美术功底,且比较费时间。

#c 缺点 纸质缺点2

同时,纸质日记需要一直额外携带一个本子,我个人比较喜欢简洁,需要符合KISS(Keep it simple and stupid)原则。

#c 转折 寻找实现方法

既然纸质日记有这么多我不喜欢的缺点,那就自己搞一个适合自己的流程,自己去实现。下一步便是提炼需求。

#c 需求 核心需求1

随时可记录。对于日记来说,随时可记录这个是最核心的需求。日记作为对自己过去的存档,其需要在有兴致的时候立即开始,而不是只能在家进行。

#c 方案 Git

Git作为作为一个分布式版本管理软件,其可以提供多端同步,正好我也有Git软件的使用经验,因此它便成了我的选择。

#c 需求 核心需求2

隐私性。另一个便是隐私性,日记里面会记录很多关于个人的信息和特质,必然不能不能被暴露,因此Git仓库的托管服务器要是自己信任的平台,同时托管的Git仓库需要进行加密。

#c 方案 服务器与git-crypt

刚好我有自己服务器,通过git-crypt加密后,存储在服务端算是一个不错的方案。

#c 需求 需求3

好迁移。使用上述的Git和git-crypt组合还可以覆盖到一个需求,便是可以自己自定义日记文件的格式,这样便可以使用markdown这种非富文本格式,这样后续可以更好的进行迁移。

0.2 知识库

#c 愿景 知识库愿景

知识库作为我自己创造或继承别人只是的“盒子”,我当然想要寻求一个可以让我学习效率和学习能力不断提升管理方法。

#c 需求 核心需求1

多端同步。作为一个我一个长期依赖电子化管理的东西,我一直在寻找可以进行多端同步的东西,之前有试过Obsdian,但是同步问题一直很难受。因此Git作为一个可以进行多端同步的方案被我欣然接受。

#c 需求 核心需求2

与大模型连接。对于处在人工智能时代的“四脚猴子”,我当然想让自己知识库和现在的大模型连接,这样便可以让自己左脚踩右脚原地升天。大模型是左脚,知识库是右脚。

1 设计原则

#c 原则 数据主权

数据必须在本地可控,服务器只作为存储介质。

#c 原则 零信任服务器

服务器默认不可信,因此敏感数据不应明文存储。

#c 原则 可迁移性

所有数据采用开放格式(如 Markdown),避免工具绑定。

2 日记方案

  • ❌ 不要在服务器上 git pull / checkout
  • ❌ 不要在锁定状态(locked)编辑文件
  • ❌ 不要把 git-crypt key 提交进仓库

远程服务器仓库:user@server.cn:~/diary.git

你的电脑 A ─┐
            ├─ git push / pull (SSH)
你的电脑 B ─┘
                  ↓
            云服务器(只存密文)
                  ↓
           bare Git repository

构建步骤

  1. 在你的云服务器上进入需要存储git仓库的目录,git init --bare diary.git
  2. 本地生成 SSH key,并将 公钥 写入服务器的 ~/.ssh/authorized_keys,以实现基于密钥的 SSH 访问。
    • ssh-keygen -t ed25519 -C "your-email"
    • ssh-copy-id user@server.cn, 将 id_ed25519.pub 传到服务器的authorized_keys
  3. 本地安装 git-crypt 后在本地 git 仓库使用 git crypt init
  4. 在本地 git 仓库 vim .gitattributes,指定哪些要加密,哪些不用。
* filter=git-crypt diff=git-crypt

# 不加密
.gitattributes !filter !diff
.gitignore     !filter !diff
README.md      !filter !diff
  1. 首次提交时 git add .git commit
  2. 关联远程仓库 git remote add origin user@server.cn:~/diary.gitgit push -u origin master
  3. 导出密钥 git crypt export-key ~/diary.key,然后保存妥善(千万不要让别人拿到这个)
  4. 新电脑使用 git clone user@server.cn:~/diary.git, 然后使用 git crypt unlock ~/diary.key 解锁仓库。

日常使用流程

  • 写之前确认仓库已解锁:git crypt status
  • 写完日记:git add . git commit -m "journal: YYYY-MM-DD" git push
  • 换设备:git pull

3 知识库方案

基本和上述 diary 相同,不使用 git crypt 功能即可。

4 安全注意事项

#c 安全模型

本方案的核心是:服务器不可信,仅作为密文存储。

#c 风险1 密钥泄露

git-crypt key 一旦泄露,所有历史数据都可以被解密。

因此密钥:

  • 不上传云盘
  • 不提交仓库
  • 建议离线存储
  • 至少保留两份备份

#c 风险2 服务器暴露

服务器地址不应公开,避免被扫描或攻击。

5 如何使用AI工具

对于知识库来说,使用主流的支持AI的代码编辑器,比如 Vscode 便可以把你的知识库和大模型连接起来,或者使用支持命令行的 AI 工具,如 Claude Code。