Obsidian 三端同步完整流程:电脑、手机、平板通过 Gitee 实时同步
适用场景:你有两台设备——Windows 电脑 + 安卓手机(平板同理),想用 Obsidian 写笔记,希望两端内容一致,改一处另一处自动跟上。
本文以Gitee 作为中转仓库,电脑端一键推送,手机端 Termux 一句命令拉取,全程免费、无需第三方同步服务。
0. 核心思路(先看懂再动手)
同步的本质不是"Obsidian 自己同步",而是"用 Git 把笔记文件夹变成代码仓库,推到 Gitee,两端再各自 pull/push"。
电脑(写笔记)──push──▶ Gitee(中转仓库) ◀──pull── 手机(Termux) ▲ │ └──────push(手机端有改动时)──┘- 电脑端:双击一个快捷方式(或命令行输
obsidian),自动把笔记pull → commit → push到 Gitee。 - 手机端:Termux 里输
obsidian,自动commit 本机改动 → pull → 有改动则 push到 Gitee。 - 平板端:和手机端完全一样(都是 Termux),或装 MGit 手动同步。
为什么选 Gitee 而不是 GitHub:国内访问快、免费私有仓库、SSH 配置简单。
1. 准备工作
1.1 需要的东西
| 项目 | 说明 |
|---|---|
| 电脑 | Windows 10/11,已装 Git(或 PortableGit) |
| 手机 | 安卓,已装 Obsidian + Termux(应用商店或 F-Droid) |
| 账号 | 一个 Gitee 账号(https://gitee.com) |
| 网络 | 能正常访问 Gitee(无需 VPN,国内直连) |
1.2 在 Gitee 上建仓库
- 登录 Gitee → 右上角+→新建仓库。
- 仓库名称随意(如
obsidian),选私有,初始化不勾选Readme(保持空仓库)。 - 创建后,记下仓库的SSH 地址,形如:
git@gitee.com:你的用户名/obsidian.git
重要:必须用SSH地址,不要 HTTPS。SSH 配一次免密,后面永不再输密码。
2. 电脑端配置
2.1 确认笔记目录是 Git 仓库
假设你的笔记在D:\Obsidian\笔记。打开 PowerShell,执行:
cd D:\Obsidian\笔记 git status如果提示"不是 git 仓库",先初始化并关联远程:
git init git remote add gitee git@gitee.com:你的用户名/obsidian.git注意:远程名我用
gitee而不是默认的origin,避免以后混淆。你也可以用origin,脚本里对应改一下即可。
2.2 配置 .gitignore(关键!避免仓库变脏)
Obsidian 会产生大量配置/缓存文件(.obsidian、.trash等),这些不该同步,否则两端会互相覆盖设置、仓库永远"脏"。
在笔记根目录创建.gitignore:
# 屏蔽 Obsidian 配置/缓存/回收站 .obsidian .trash # 屏蔽 AI 助手工作目录(如有) .claudian # 屏蔽快捷方式/链接文件 *.url open.url # 屏蔽系统垃圾 .DS_Store Thumbs.db desktop.ini *.tmp要点:用无斜杠前缀写法(如
.obsidian而不是.obsidian/),可以同时匹配已追踪和未追踪的文件/目录。
如果之前已经把这些目录git add进去了,需要用git rm --cached -r .obsidian把它们从索引移除,再提交一次。
2.3 统一换行符(避免 CRLF 假改动)
Windows 默认 CRLF,手机默认 LF,直接同步会产生"每行都被改了"的假冲突。在笔记根目录创建.gitattributes:
* text=auto eol=lf并在 Git 里关闭自动转换:
git config core.autocrlf false2.4 生成 SSH 密钥并绑定 Gitee
ssh-keygen-t ed25519-C"你的邮箱"# 一路回车,不用设密码然后查看公钥并复制到 Gitee:
cat~/.ssh/id_ed25519.pub- 打开 Gitee → 右上角头像 →设置→SSH 公钥→ 粘贴保存。
- 测试连接:
ssh-T git@gitee.com# 看到 Hi 你的用户名! 即成功2.5 写同步脚本
创建C:\Users\你的用户名\obsidian_sync_windows.sh:
#!/bin/bash# Obsidian 电脑端一键同步(仅 Gitee)NOTE_DIR="D:/Obsidian/笔记"REMOTE="gitee"BRANCH="main"cd"$NOTE_DIR"||{echo"❌ 目录不存在";exit1;}# 1. 拉取远程gitpull"$REMOTE""$BRANCH"--rebase--no-edit||{echo"⚠️ 拉取冲突,请手动解决后重跑";exit1;}# 2. 提交本地改动gitadd.if!gitdiff--cached--quiet;thengitcommit-m"电脑端自动同步$(date'+%Y-%m-%d %H:%M:%S')"fi# 3. 推送gitpush"$REMOTE""$BRANCH"||{echo"❌ 推送失败,检查网络/凭据";exit1;}echo"✅ 同步完成!"注意
NOTE_DIR用正斜杠D:/Obsidian/笔记,Git Bash 里反斜杠会出错。
2.6 做成"双击就能同步"
方式 A:桌面快捷方式
- 桌面右键 → 新建 → 快捷方式。
- 目标填(一行):
"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:@echo off "C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" "C:\Users\你的用户名\obsidian_sync_windows.sh" - 把
C:\Users\你的用户名加进系统PATH(设置 → 关于 → 高级系统设置 → 环境变量 → 用户 PATH → 新建)。 - 重启终端后,任意位置输入
obsidian回车即可同步。
2.7 首次推送
cd D:\Obsidian\笔记 git add.git commit-m"初始提交"git push gitee main如果远程默认分支是
master而不是main,把脚本和命令里的main换成master。
3. 手机端配置(Termux)
3.1 安装与授权存储
- 应用商店装Termux。
- 打开 Termux,先给存储权限(让 Termux 能访问手机文件):
termux-setup-storage会弹窗请求权限,允许。之后~/storage/shared/就映射到手机内部存储。
- 装 Git:
pkg update&&pkginstall-ygitopenssh3.2 把 Gitee 仓库克隆到手机
假设你的 Obsidian 笔记库在手机上的路径是Download/Obsidian_日记:
cd~/storage/shared/Downloadgitclone git@gitee.com:你的用户名/obsidian.git Obsidian_日记克隆后,
Obsidian_日记文件夹就是 git 仓库,直接用 Obsidian 打开它即可。
3.3 手机端 SSH 免密
ssh-keygen-ted25519-C"手机端"cat~/.ssh/id_ed25519.pub把公钥同样添加到 Gitee 的 SSH 公钥里(可以和多台设备共用一个,也可以分别添加)。测试:
ssh-Tgit@gitee.com3.4 写手机端同步脚本
重要:脚本不能放在
~/storage/shared/下(安卓外部存储不允许执行脚本),必须放 Termux 家目录~。
nano~/obsidian_sync_termux.sh内容:
#!/bin/bash# Obsidian 手机端同步(Termux)NOTE_DIR="$HOME/storage/shared/Download/Obsidian_日记"REMOTE="origin"BRANCH="main"cd"$NOTE_DIR"||{echo"❌ 目录不存在$NOTE_DIR";exit1;}# 1. 先提交本机改动gitadd.if!gitdiff--cached--quiet;thengitcommit-m"手机端同步$(date'+%Y-%m-%d %H:%M:%S')"fi# 2. 拉取 Giteegitpull"$REMOTE""$BRANCH"--rebase--no-edit||{echo"⚠️ 拉取冲突,请手动解决后重跑";exit1;}# 3. 若有本机提交,推送回 Gitee(双向同步)if[-n"$(gitlog"$REMOTE/$BRANCH..HEAD"2>/dev/null)"];thengitpush"$REMOTE""$BRANCH"||{echo"❌ 推送失败";exit1;}fiecho"✅ 手机端同步完成!"保存后加执行权限:
chmod+x ~/obsidian_sync_termux.sh3.5 添加同步口令
编辑~/.bashrc(或~/.zshrc):
echo"alias obsidian='~/obsidian_sync_termux.sh'">>~/.bashrcsource~/.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 配了失效的全局代理。清除它:
git config--global--unset http.proxy git config--global--unset https.proxyQ:手机端报Permission denied?
A:脚本放在了~/storage/shared/外部存储下,安卓禁止执行。移到家目录:
mv~/storage/shared/Download/Obsidian_日记/obsidian_sync_termux.sh ~/Q:git status 显示一堆.obsidian文件的改动?
A:这些配置目录被追踪了。从索引移除:
gitrm--cached-r.obsidian.trash git commit-m"停止追踪配置目录"并确保.gitignore里有.obsidian和.trash。
Q:每次 push 都提示输入密码?
A:你用的是 HTTPS 地址。改用 SSH:
git remoteset-urlgitee git@gitee.com:你的用户名/obsidian.gitQ:仓库太大,Gitee 警告超 80% 配额?
A:历史里混进了大文件(如 Obsidian 程序、视频)。短期可用,长期需清理历史大文件(用git filter-repo或 BFG),或新建干净仓库重新推。
Q:手机端同步报CONFLICT (rename/delete)卡在 rebase 里?
A:这是双端同步最容易遇到的冲突类型。典型报错:
CONFLICT (rename/delete): 日记/2026/照片/1.22-1 1.jpg renamed to 05-日记/2026/照片/1.22-1 1.jpg in HEAD, but deleted in 8bcde41 (手机端同步 ...) error: could not apply 8bcde41... 手机端同步 ...原因:同一文件在两端做了"不同方向"的操作——一端把它移动/重命名了位置(如电脑端把日记/改成05-日记/),另一端却把它删除了(如手机端同步时删了旧路径的文件)。git pull --rebase合并时不知道以谁为准,于是卡住,仓库进入"rebase 进行中"状态。
解决方法(手机端 Termux 里操作):
第 1 步,先中止卡住的 rebase:
cd~/storage/shared/Download/Obsidian_日记gitrebase--abort若仍报there is already a rebase-merge directory,说明 git 的内部状态卡住了,手动清除:
rm-fr.git/rebase-merge第 2 步,确认已退出 rebase 状态:
gitstatus正常应显示分支状态,不再提示 “rebase in progress”。
第 3 步,以远程为准覆盖本地(前提是电脑端已是最终正确状态且已推到 Gitee):
gitfetch origingitreset--hardorigin/main此时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,执行:
$BASH="C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe"$SCRIPT="C:\Users\你的用户名\obsidian_sync_windows.sh"$action=New-ScheduledTaskAction-Execute$BASH-Argument"`"$SCRIPT`""$triggers= @((New-ScheduledTaskTrigger-Daily-At"09:00"),(New-ScheduledTaskTrigger-Daily-At"19:00"),(New-ScheduledTaskTrigger-AtLogOn))Register-ScheduledTask-TaskName"ObsidianAutoSync"-Action$action-Trigger$triggers-Description"Obsidian 自动同步"注意:自动推送只适合"电脑端只增不改旧文件"的场景。若你会在手机端改同一文件,自动 push 可能覆盖,建议手动同步更稳妥。
8. 总结
整套方案的成本:0 元,只需要 Gitee 账号 + 一点配置时间。
核心文件清单:
- 电脑:
obsidian_sync_windows.sh(同步逻辑)+obsidian.cmd(命令入口)+ 桌面快捷方式 - 手机:
~/obsidian_sync_termux.sh(同步逻辑)+~/.bashrc里的 alias - 仓库根:
.gitignore+.gitattributes(防脏、防冲突的灵魂配置)