用 NAS 自建 Git Server 同步本地 Markdown 笔记

整理一种把 Markdown 笔记保存在本地 NAS Git Server 上,并在 Android 与 Windows 多设备之间同步的方案,覆盖 NAS 端仓库、Android 端和 Windows 端的基本设置。

如果已经有一台本地 NAS,又希望笔记尽量保存在自己手里,可以把 Markdown 笔记放进 NAS 上的 Git Server,再用 Android 和 Windows 客户端同步。这个方案不依赖公共云盘,适合 Obsidian、Markor、VS Code、Typora 这类以本地 Markdown 文件为核心的笔记工具。

它的基本思路很简单:

  1. NAS 上创建一个 Git 裸仓库,作为笔记的中央仓库。
  2. Windows 端克隆仓库,用常见编辑器写笔记。
  3. Android 端克隆同一个仓库,用 Git 客户端拉取和推送。
  4. 每次换设备前先 pull,写完后再 commitpush

这种方式不是最傻瓜的同步方案,但可控性很好,历史版本也清楚。只要养成提交习惯,就能把笔记、配置、图片附件都放在自己的 NAS 上长期保存。

方案适合谁

这套方案适合下面几类人:

  • 家里或办公室已经有 NAS。
  • 笔记主要是 Markdown 文件。
  • 希望笔记数据保存在本地网络里,而不是只放在商业云盘上。
  • 需要 Windows 和 Android 多设备同步。
  • 能接受 Git 的基本操作,例如 clonepullcommitpush

如果你希望完全自动、完全无感同步,Syncthing、WebDAV 或笔记软件自带同步可能更省心。Git 更适合重视版本历史、可回滚、可迁移和可控性的笔记库。

一、在 NAS 上安装 Git Server

不同 NAS 系统的入口不一样,但目标都一样:让 NAS 提供一个可以通过 SSH 访问的 Git 仓库。

常见做法有三种:

方式 适合场景
NAS 套件中心安装 Git Server 群晖、威联通等成品 NAS,想少折腾
Docker 部署 Gitea 想要 Web 界面、账号管理和更完整的 Git 服务
直接用 SSH + 裸仓库 只给自己用,追求简单稳定

如果只是个人笔记同步,SSH + 裸仓库已经够用。假设 NAS 上有一个专门的 Git 用户 git,仓库存放目录为 /volume1/git,可以在 NAS 终端里执行:

1
2
3
mkdir -p /volume1/git/notes.git
cd /volume1/git/notes.git
git init --bare

裸仓库不直接编辑文件,只作为同步中心。实际写笔记的目录在 Windows 或 Android 本地。

接着确认 SSH 可以访问 NAS:

1
ssh git@192.168.1.10

如果 NAS 支持 SSH 公钥登录,建议配置公钥,避免每次推送都输入密码。Windows 和 Android 可以分别生成自己的 SSH key,再把公钥加入 NAS 的 authorized_keys 或 Git Server 用户设置里。

二、Windows 端设置

Windows 端建议安装 Git for Windows,然后选择一个本地目录存放笔记,例如 D:\Notes

首次克隆:

1
git clone git@192.168.1.10:/volume1/git/notes.git D:\Notes

进入目录后,可以创建基本结构:

1
2
cd D:\Notes
mkdir inbox, daily, projects, resources

然后用 Obsidian、VS Code、Typora 或其他 Markdown 编辑器打开 D:\Notes。写完第一批笔记后提交:

1
2
3
git add .
git commit -m "初始化笔记库"
git push origin main

如果仓库默认分支是 master,就把命令里的 main 换成 master。也可以统一改成 main

1
2
git branch -M main
git push -u origin main

日常使用时,Windows 端可以保持这个节奏:

1
2
3
4
git pull --rebase
git add .
git commit -m "更新笔记"
git push

三、Android 端设置

Android 端可以使用支持 Git 的客户端来同步本地 Markdown 目录。常见选择包括:

工具 用法
Termux 最灵活,接近 Linux 命令行
MGit 图形界面 Git 客户端,适合不想敲太多命令
GitJournal 更像笔记应用,适合简单 Markdown 笔记

如果选择 Termux,可以先安装 Git 和 OpenSSH:

1
2
pkg update
pkg install git openssh

生成 SSH key:

1
ssh-keygen -t ed25519 -C "android-notes"

把生成的公钥加入 NAS 的 Git 用户授权里。然后在手机本地选择一个目录克隆仓库:

1
git clone git@192.168.1.10:/volume1/git/notes.git ~/notes

如果想让普通 Android 编辑器访问这个目录,可以把仓库放到共享存储目录,例如:

1
2
cd /sdcard
git clone git@192.168.1.10:/volume1/git/notes.git Notes

之后可以用 Markor、Obsidian Android 或其他 Markdown 编辑器打开 /sdcard/Notes。手机端修改后,再回到 Termux 执行:

1
2
3
4
5
cd /sdcard/Notes
git pull --rebase
git add .
git commit -m "手机更新笔记"
git push

Android 上最容易出问题的是权限和路径。Termux 自己的家目录更稳定,但部分编辑器不一定能直接访问;/sdcard 方便编辑器访问,但权限、文件监听和性能可能受系统限制。可以先用少量笔记测试,再决定最终目录。

四、Obsidian 和 Joplin 怎么落地

NAS Git Server 只解决“文件放在哪里、怎么同步”的问题。真正写笔记时,还需要选择笔记应用。这里可以分成 Obsidian 方案和 Joplin 方案。

方案 同步方式 适合人群 注意点
Obsidian + Git 笔记目录就是 Git 仓库,Windows 和 Android 都拉取同一个仓库 想要双链、知识图谱、插件生态和纯 Markdown 文件的人 Android 上最好先测试 Git 客户端和 Obsidian 对同一目录的访问权限
Joplin + Git 不建议直接把 Joplin 数据库放进 Git;更适合用 Joplin 自带同步,或定期导出 Markdown 到 Git 想要网页剪藏、端到端加密、传统笔记本结构的人 Joplin 的本地数据不是普通 Markdown 文件夹,不适合直接当 Git 笔记库同步

Obsidian 方案

Obsidian 最适合这套 NAS Git 同步方案。原因是它的 vault 本质上就是一个普通文件夹,里面是 Markdown 文件、图片附件和配置文件。你可以直接把 D:\Notes/sdcard/Notes 作为 Obsidian vault。

Windows 端流程:

1
git clone git@192.168.1.10:/volume1/git/notes.git D:\Notes

然后在 Obsidian 里打开 D:\Notes

Android 端流程:

1
2
cd /sdcard
git clone git@192.168.1.10:/volume1/git/notes.git Notes

然后在 Obsidian Android 里打开 /sdcard/Notes

Obsidian 方案建议:

  • 单人使用时,可以提交 .obsidian/,让主题、插件和部分设置在多设备间同步。
  • 如果 Android 和 Windows 插件差异很大,可以只提交笔记正文,不提交 .obsidian/workspace.json 这类设备状态文件。
  • 图片附件建议统一放到 attachments/,避免散落在各级目录里。
  • 每次打开 Obsidian 前先 git pull --rebase,写完后再 commitpush

可以准备一个 .gitignore,减少设备状态文件造成的冲突:

1
2
3
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.trash/

Joplin 方案

Joplin 的思路和 Obsidian 不一样。它虽然使用 Markdown 语法,但本地数据主要由应用数据库管理,不是一个可以直接拿来 Git 同步的普通 Markdown 文件夹。因此,不建议把 Joplin 的配置目录或数据库目录直接放进 Git 仓库。

如果你更喜欢 Joplin,有两种更稳的做法:

做法 说明
使用 Joplin 自带同步 通过 WebDAV、Nextcloud、Joplin Cloud、Dropbox、OneDrive 等方式同步,NAS 可以提供 WebDAV 或 Nextcloud
定期导出 Markdown 到 Git Joplin 作为主力笔记应用,定期把笔记导出为 Markdown,再提交到 NAS Git 仓库做备份

如果 NAS 上已经有 WebDAV 或 Nextcloud,Joplin 直接连 NAS 同步会比 Git 更顺滑。它还可以启用端到端加密,适合不想处理 Git 冲突、但又希望数据尽量在自己控制范围内的人。

Joplin + NAS 的推荐路线是:

  1. NAS 上开启 WebDAV 或部署 Nextcloud。
  2. Joplin Windows 端配置同一个同步目标。
  3. Joplin Android 端配置同一个同步目标。
  4. 需要版本备份时,再定期导出 Markdown 到 Git 仓库。

简单判断:

  • 想要“本地 Markdown 文件夹 + 双链 + Git 历史”,选 Obsidian。
  • 想要“传统笔记应用 + 网页剪藏 + 加密同步”,选 Joplin。
  • 想把 NAS Git Server 作为主同步中心,Obsidian 更合适。
  • 想把 NAS 当成私有云同步后端,Joplin 更合适。

五、推荐的笔记目录结构

笔记库不要一开始就设计得太复杂。可以先用下面这种结构:

1
2
3
4
5
6
7
Notes/
  inbox/
  daily/
  projects/
  resources/
  attachments/
  README.md

含义很直观:

  • inbox/ 放临时记录。
  • daily/ 放日记、日志和每日流水。
  • projects/ 放项目笔记。
  • resources/ 放长期资料。
  • attachments/ 放图片、PDF 和其他附件。

如果使用 Obsidian,可以把这个目录直接作为 vault。.obsidian/ 配置是否提交,要看个人习惯。单人多设备使用时可以提交;如果不同设备插件差异很大,也可以只提交部分配置。

六、避免同步冲突

Git 同步笔记的关键不是命令多复杂,而是习惯要稳定。

建议遵守几条规则:

  1. 换设备写笔记前,先执行 git pull --rebase
  2. 写完一轮后,及时 commitpush
  3. 不要在两台设备上同时长时间编辑同一个文件。
  4. 图片和大附件不要无限塞进 Git 仓库。
  5. 定期在 NAS 外再备份一份仓库。

如果出现冲突,Git 会标出冲突文件。Markdown 文本冲突通常不难处理,但手机上处理体验比较差,所以尽量在 Windows 上解决冲突。

七、是否需要自动同步

可以给 Windows 写一个简单脚本,把 pulladdcommitpush 串起来。但笔记同步不建议完全无脑自动提交,因为误删、空提交、冲突和大附件都可能被自动推上去。

更稳妥的方式是半自动:

  • 打开笔记前先手动拉取。
  • 写完后运行一个脚本提交。
  • 每次提交信息简单说明这次改了什么。

例如 Windows 可以准备一个 sync-notes.ps1

1
2
3
4
git pull --rebase
git add .
git commit -m "更新笔记"
git push

如果没有变更,git commit 会提示 nothing to commit,这不是问题。

八、这个方案的优缺点

方面 说明
优点 数据在本地 NAS,版本历史清晰,可回滚,可迁移,适合 Markdown
缺点 需要理解 Git,冲突需要手动处理,移动端体验不如云同步顺滑
适合 技术用户、本地优先笔记、个人知识库、项目文档
不适合 完全不想接触命令行、需要多人实时协作、频繁同步大附件

我的建议

如果只是想在 Android 和 Windows 之间同步普通 Markdown 笔记,可以先从最小方案开始:NAS 上一个裸仓库,Windows 上 Git for Windows,Android 上 Termux 或 MGit。不要一开始就引入复杂权限、自动化脚本和过度分类。

等这套流程跑顺以后,再考虑 Gitea、自动备份、SSH key 分设备管理、附件分仓库、定时任务等扩展。笔记系统最重要的是长期稳定可用,而不是第一天就把所有功能堆满。

一句话:NAS Git Server 适合把 Markdown 笔记做成本地优先、可追溯、可迁移的个人资料库;它不如云同步省心,但控制权更清楚。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计