Obsidian 三端同步完整流程:电脑、手机、平板通过 Gitee 实时同步
本文记录我用 Git + Gitee 实现 Obsidian 在 Windows 电脑和安卓手机(平板同理)之间双向同步的完整流程。核心思路是把笔记文件夹变成 Git 仓库,推到 Gitee 作为中转,两端各自 pull/push。
0. 核心思路(先看懂再动手)
同步的本质不是”Obsidian 自己同步”,而是”用 Git 把笔记文件夹变成代码仓库,推到 Gitee,两端再各自 pull/push“。
1 | 电脑(写笔记)──push──▶ Gitee(中转仓库) ◀──pull── 手机(Termux) |
- 电脑端:双击快捷方式(或命令行输
obsidian),自动pull → commit → push到 Gitee。 - 手机端:Termux 里输
obsidian,自动commit 本机改动 → pull → 有改动则 push。 - 平板端:和手机端完全一样(都是 Termux)。
为什么选 Gitee 而不是 GitHub:国内访问快、免费私有仓库、SSH 配置简单。
1. 准备工作
1.1 需要的东西
| 项目 | 说明 |
|---|---|
| 电脑 | Windows 10/11,已装 Git(或 PortableGit) |
| 手机 | 安卓,已装 Obsidian + Termux |
| 账号 | 一个 Gitee 账号(https://gitee.com) |
| 网络 | 能正常访问 Gitee(国内直连,无需 VPN) |
1.2 在 Gitee 上建仓库
- 登录 Gitee → 右上角 + → 新建仓库。
- 仓库名随意(如
obsidian),选 私有,初始化 不勾选 Readme(保持空仓库)。 - 创建后记下仓库的 SSH 地址:
[email protected]:你的用户名/obsidian.git
重要:必须用 SSH 地址,不要 HTTPS。SSH 配一次免密,后面永不再输密码。
2. 电脑端配置
2.1 确认笔记目录是 Git 仓库
假设笔记在 D:\Obsidian\笔记:
1 | cd D:\Obsidian\笔记 |
若不是 git 仓库,先初始化并关联远程:
1 | git init |
远程名用
gitee而非默认origin,避免以后混淆。若用origin,脚本里对应改一下即可。
2.2 配置 .gitignore(关键!避免仓库变脏)
Obsidian 会产生大量配置/缓存文件(.obsidian、.trash 等),这些不该同步,否则两端互相覆盖设置、仓库永远”脏”。
在笔记根目录创建 .gitignore:
1 | # 屏蔽 Obsidian 配置/缓存/回收站 |
要点:用无斜杠前缀写法(如
.obsidian而非.obsidian/),可同时匹配已追踪和未追踪的文件/目录。
如果之前已把这些目录git add进去了,用git rm --cached -r .obsidian从索引移除,再提交一次。
2.3 统一换行符(避免 CRLF 假改动)
Windows 默认 CRLF,手机默认 LF,直接同步会产生”每行都被改了”的假冲突。在笔记根目录创建 .gitattributes:
1 | * text=auto eol=lf |
并关闭 Git 自动转换:
1 | git config core.autocrlf false |
2.4 生成 SSH 密钥并绑定 Gitee
1 | ssh-keygen -t ed25519 -C "你的邮箱" |
- 打开 Gitee → 右上角头像 → 设置 → SSH 公钥 → 粘贴保存。
- 测试:
1 | ssh -T [email protected] |
2.5 写同步脚本
创建 C:\Users\你的用户名\obsidian_sync_windows.sh:
1 |
|
NOTE_DIR用正斜杠D:/Obsidian/笔记,Git Bash 里反斜杠会出错。
2.6 做成”双击就能同步”
方式 A:桌面快捷方式
- 桌面右键 → 新建 → 快捷方式。
- 目标填(一行):
1
"C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" "C:\Users\你的用户名\obsidian_sync_windows.sh"
Git 装在别处就换成
C:\Program Files\Git\bin\bash.exe。 - 命名如
obsidian同步,双击即同步。
方式 B:命令行输一个词
- 创建
C:\Users\你的用户名\obsidian.cmd:1
2@echo off
"C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" "C:\Users\你的用户名\obsidian_sync_windows.sh" - 把
C:\Users\你的用户名加进系统 PATH(设置 → 关于 → 高级系统设置 → 环境变量 → 用户 PATH → 新建)。 - 重启终端后,任意位置输入
obsidian回车即可同步。
2.7 首次推送
1 | cd D:\Obsidian\笔记 |
若远程默认分支是
master而非main,脚本和命令里的main换成master。
3. 手机端配置(Termux)
3.1 安装与授权存储
- 应用商店装 Termux。
- 打开 Termux,给存储权限:
1 | termux-setup-storage |
弹窗请求权限,允许。之后 ~/storage/shared/ 映射到手机内部存储。
- 装 Git:
1 | pkg update && pkg install -y git openssh |
3.2 克隆 Gitee 仓库到手机
假设 Obsidian 笔记库在手机上的路径是 Download/Obsidian_日记:
1 | cd ~/storage/shared/Download |
克隆后
Obsidian_日记就是 git 仓库,直接用 Obsidian 打开它即可。
3.3 手机端 SSH 免密
1 | ssh-keygen -t ed25519 -C "手机端" |
把公钥同样添加到 Gitee 的 SSH 公钥里。测试:
1 | ssh -T [email protected] |
3.4 写手机端同步脚本
重要:脚本不能放在
~/storage/shared/下(安卓外部存储不允许执行脚本),必须放 Termux 家目录~。
1 | nano ~/obsidian_sync_termux.sh |
内容:
1 |
|
保存后加执行权限:
1 | chmod +x ~/obsidian_sync_termux.sh |
3.5 做成”输一个词就同步”
编辑 ~/.bashrc(或 ~/.zshrc):
1 | echo "alias obsidian='~/obsidian_sync_termux.sh'" >> ~/.bashrc |
以后在 Termux 里输入 obsidian 回车就自动同步。
若 alias 不生效(某些 Termux 版本),直接用
bash ~/obsidian_sync_termux.sh也能跑。
4. 平板端
平板和手机完全一样:装 Termux + Obsidian,克隆同一个 Gitee 仓库,放同样的脚本和 alias。三端共享一个 Gitee 仓库,谁改谁 push,其他人 pull 就跟上。
5. 日常使用规范(避免冲突的关键)
- 同步前先同步:开始写之前先跑一次,拿到最新内容。
- 写完就同步:离开设备前跑一次,把改动推上去。
- 大文件要谨慎:图片、视频会撑大仓库。Gitee 免费仓库有容量上限(约 1GB),超了会警告甚至拒收。图片尽量压缩;超大视频用云盘分享链接代替。
- 冲突怎么办:极少数情况两端同时改了同一文件,pull 会报冲突。常见两类:
- 内容冲突:同一文件两端都改了同一行,文件里出现
<<<<<<</=======/>>>>>>>标记,手动编辑保留正确内容后git add . && git commit再 push。 - rename/delete 冲突:一端把文件移动/重命名了,另一端却删了它,
git pull --rebase会卡在 rebase 中间(见 FAQ 对应条目)。这种不能靠编辑文件解决,需git rebase --abort后处理。
- 内容冲突:同一文件两端都改了同一行,文件里出现
- 不要在中转仓库里手改文件:Gitee 网页上直接编辑笔记容易和本地冲突,尽量只在本地 Obsidian 里改。
6. 常见问题(FAQ)
Q:push 时报 Failed to connect to gitee.com port 443 via 127.0.0.1?
A:git 配了失效的全局代理。清除它:
1 | git config --global --unset http.proxy |
Q:手机端报 Permission denied?
A:脚本放在了 ~/storage/shared/ 外部存储下,安卓禁止执行。移到家目录:
1 | mv ~/storage/shared/Download/Obsidian_日记/obsidian_sync_termux.sh ~/ |
Q:git status 显示一堆 .obsidian 文件的改动?
A:配置目录被追踪了。从索引移除:
1 | git rm --cached -r .obsidian .trash |
并确保 .gitignore 里有 .obsidian 和 .trash。
Q:每次 push 都提示输入密码?
A:用的是 HTTPS 地址。改用 SSH:
1 | git remote set-url gitee [email protected]:你的用户名/obsidian.git |
Q:仓库太大,Gitee 警告超 80% 配额?
A:历史里混进了大文件(如 Obsidian 程序、视频)。短期可用,长期需清理历史大文件(用 git filter-repo 或 BFG),或新建干净仓库重新推。
Q:手机端同步报 CONFLICT (rename/delete) 卡在 rebase 里?
A:这是双端同步最容易遇到的冲突类型。典型报错:
1 | CONFLICT (rename/delete): 日记/2026/照片/1.22-1 1.jpg renamed to 05-日记/2026/照片/1.22-1 1.jpg in HEAD, but deleted in 8bcde41 (手机端同步 ...) |
原因:同一文件在两端做了”不同方向”的操作——一端把它移动/重命名了位置(如电脑端把 日记/ 改成 05-日记/),另一端却把它删除了(如手机端同步时删了旧路径的文件)。git pull --rebase 合并时不知道以谁为准,于是卡住,仓库进入”rebase 进行中”状态。
解决方法(手机端 Termux 里操作):
第 1 步,先中止卡住的 rebase:
1 | cd ~/storage/shared/Download/Obsidian_日记 |
若仍报 there is already a rebase-merge directory,说明 git 的内部状态卡住了,手动清除:
1 | rm -fr .git/rebase-merge |
第 2 步,确认已退出 rebase 状态:
1 | git status |
正常应显示分支状态,不再提示 “rebase in progress”。
第 3 步,以远程为准覆盖本地(前提是电脑端已是最终正确状态且已推到 Gitee):
1 | git fetch origin |
此时 git status 应显示 Your branch is up to date with 'origin/main',冲突消失。
⚠️
git reset --hard会丢弃手机端未推送的本地改动。若手机端有电脑上没有的新笔记,先别跑这步,应手动git stash保存后再处理。
每条命令的作用:
git rebase --abort:取消正在进行的 rebase,仓库回到 rebase 前的状态,冲突标记清除,文件不丢。rm -fr .git/rebase-merge:急救命令,手动删除 git 记录 rebase 状态的内部目录,强制退出”rebase 进行中”。git fetch origin:只下载远程最新提交到本地,不合并、不改工作文件,先看清楚远程有什么。git reset --hard origin/main:把本地分支硬重置到和 Gitee 的main完全一致(文件、历史全变一样),本地独有改动被丢弃。git status:查看仓库状态,验证操作是否成功、是否还有冲突。
根因与预防:rebase 对”文件名改动(移动/重命名)”特别敏感,双端对同一文件做不同操作时极易冲突。预防措施:
- 一端重命名/移动文件后,先同步一次,等其他端拉取到位,再在另一端操作该文件。
- 手机端脚本可把
git pull --rebase改为git pull(普通 merge),冲突时生成合并提交而非卡住;或手机端只拉不推(除非真在手机写了新笔记)。 - 大批量整理文件(如把
日记/整体改名05-日记/)时,先在一端完成并推送,再在其他端同步,避免双端同时整理。
7. 进阶:让电脑自动同步(可选)
不想每次手动跑,可以让 Windows 定时任务帮你推。以管理员身份运行 PowerShell:
1 | $BASH = "C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" |
自动推送只适合”电脑端只增不改旧文件”的场景。若你会在手机端改同一文件,自动 push 可能覆盖,建议手动同步更稳妥。
8. 总结
整套方案成本:0 元,只需 Gitee 账号 + 一点配置时间。
核心文件清单:
- 电脑:
obsidian_sync_windows.sh(同步逻辑)+obsidian.cmd(命令入口)+ 桌面快捷方式 - 手机:
~/obsidian_sync_termux.sh(同步逻辑)+~/.bashrc里的 alias - 仓库根:
.gitignore+.gitattributes(防脏、防冲突的灵魂配置)
记住一句话:改完就同步,同步前先拉取,三端笔记永远一致。