Obsidian 三端同步完整流程:电脑、手机、平板通过 Gitee 实时同步

Obsidian 三端同步完整流程:电脑、手机、平板通过 Gitee 实时同步

适用场景:你有两台设备------Windows 电脑 + 安卓手机(平板同理),想用 Obsidian 写笔记,希望两端内容一致,改一处另一处自动跟上。 本文以 Gitee 作为中转仓库,电脑端一键推送,手机端 Termux 一句命令拉取,全程免费、无需第三方同步服务。


0. 核心思路(先看懂再动手)

同步的本质不是"Obsidian 自己同步",而是"用 Git 把笔记文件夹变成代码仓库,推到 Gitee,两端再各自 pull/push"。

perl 复制代码
电脑(写笔记)──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 账号(gitee.com)
网络 能正常访问 Gitee(无需 VPN,国内直连)

1.2 在 Gitee 上建仓库

  1. 登录 Gitee → 右上角 +新建仓库

  2. 仓库名称随意(如 obsidian),选 私有 ,初始化 不勾选 Readme(保持空仓库)。

  3. 创建后,记下仓库的 SSH 地址 ,形如:

    scss 复制代码
    git@gitee.com:你的用户名/obsidian.git

重要:必须用 SSH 地址,不要 HTTPS。SSH 配一次免密,后面永不再输密码。


2. 电脑端配置

2.1 确认笔记目录是 Git 仓库

假设你的笔记在 D:\Obsidian\笔记。打开 PowerShell,执行:

powershell 复制代码
cd D:\Obsidian\笔记
git status

如果提示"不是 git 仓库",先初始化并关联远程:

powershell 复制代码
git init
git remote add gitee git@gitee.com:你的用户名/obsidian.git

注意:远程名我用 gitee 而不是默认的 origin,避免以后混淆。你也可以用 origin,脚本里对应改一下即可。

2.2 配置 .gitignore(关键!避免仓库变脏)

Obsidian 会产生大量配置/缓存文件(.obsidian.trash 等),这些不该同步,否则两端会互相覆盖设置、仓库永远"脏"。

在笔记根目录创建 .gitignore

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

gitattributes 复制代码
* text=auto eol=lf

并在 Git 里关闭自动转换:

powershell 复制代码
git config core.autocrlf false

2.4 生成 SSH 密钥并绑定 Gitee

powershell 复制代码
ssh-keygen -t ed25519 -C "你的邮箱"
# 一路回车,不用设密码

然后查看公钥并复制到 Gitee:

powershell 复制代码
cat ~/.ssh/id_ed25519.pub
  • 打开 Gitee → 右上角头像 → 设置SSH 公钥 → 粘贴保存。
  • 测试连接:
powershell 复制代码
ssh -T git@gitee.com
# 看到 Hi 你的用户名! 即成功

2.5 写同步脚本

创建 C:\Users\你的用户名\obsidian_sync_windows.sh

bash 复制代码
#!/bin/bash
# Obsidian 电脑端一键同步(仅 Gitee)
NOTE_DIR="D:/Obsidian/笔记"
REMOTE="gitee"
BRANCH="main"

cd "$NOTE_DIR" || { echo "❌ 目录不存在"; exit 1; }

# 1. 拉取远程
git pull "$REMOTE" "$BRANCH" --rebase --no-edit || {
    echo "⚠️ 拉取冲突,请手动解决后重跑"; exit 1; }

# 2. 提交本地改动
git add .
if ! git diff --cached --quiet; then
    git commit -m "电脑端自动同步 $(date '+%Y-%m-%d %H:%M:%S')"
fi

# 3. 推送
git push "$REMOTE" "$BRANCH" || {
    echo "❌ 推送失败,检查网络/凭据"; exit 1; }

echo "✅ 同步完成!"

注意 NOTE_DIR 用正斜杠 D:/Obsidian/笔记,Git Bash 里反斜杠会出错。

2.6 做成"双击就能同步"

方式 A:桌面快捷方式

  1. 桌面右键 → 新建 → 快捷方式。

  2. 目标填(一行):

    arduino 复制代码
    "C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" "C:\Users\你的用户名\obsidian_sync_windows.sh"

    如果你的 Git 装在别处,把路径换成 C:\Program Files\Git\bin\bash.exe

  3. 命名如 obsidian同步,以后双击就同步。

方式 B:命令行输一个词

  1. 创建 C:\Users\你的用户名\obsidian.cmd

    bat 复制代码
    @echo off
    "C:\Users\你的用户名\.workbuddy\vendor\PortableGit\bin\bash.exe" "C:\Users\你的用户名\obsidian_sync_windows.sh"
  2. C:\Users\你的用户名 加进系统 PATH(设置 → 关于 → 高级系统设置 → 环境变量 → 用户 PATH → 新建)。

  3. 重启终端后,任意位置输入 obsidian 回车即可同步。

2.7 首次推送

powershell 复制代码
cd D:\Obsidian\笔记
git add .
git commit -m "初始提交"
git push gitee main

如果远程默认分支是 master 而不是 main,把脚本和命令里的 main 换成 master


3. 手机端配置(Termux)

3.1 安装与授权存储

  1. 应用商店装 Termux
  2. 打开 Termux,先给存储权限(让 Termux 能访问手机文件):
bash 复制代码
termux-setup-storage

会弹窗请求权限,允许。之后 ~/storage/shared/ 就映射到手机内部存储。

  1. 装 Git:
bash 复制代码
pkg update && pkg install -y git openssh

3.2 把 Gitee 仓库克隆到手机

假设你的 Obsidian 笔记库在手机上的路径是 Download/Obsidian_日记

bash 复制代码
cd ~/storage/shared/Download
git clone git@gitee.com:你的用户名/obsidian.git Obsidian_日记

克隆后,Obsidian_日记 文件夹就是 git 仓库,直接用 Obsidian 打开它即可。

3.3 手机端 SSH 免密

bash 复制代码
ssh-keygen -t ed25519 -C "手机端"
cat ~/.ssh/id_ed25519.pub

把公钥同样添加到 Gitee 的 SSH 公钥里(可以和多台设备共用一个,也可以分别添加)。测试:

bash 复制代码
ssh -T git@gitee.com

3.4 写手机端同步脚本

重要 :脚本不能 放在 ~/storage/shared/ 下(安卓外部存储不允许执行脚本),必须放 Termux 家目录 ~

bash 复制代码
nano ~/obsidian_sync_termux.sh

内容:

bash 复制代码
#!/bin/bash
# Obsidian 手机端同步(Termux)
NOTE_DIR="$HOME/storage/shared/Download/Obsidian_日记"
REMOTE="origin"
BRANCH="main"

cd "$NOTE_DIR" || { echo "❌ 目录不存在 $NOTE_DIR"; exit 1; }

# 1. 先提交本机改动
git add .
if ! git diff --cached --quiet; then
    git commit -m "手机端同步 $(date '+%Y-%m-%d %H:%M:%S')"
fi

# 2. 拉取 Gitee
git pull "$REMOTE" "$BRANCH" --rebase --no-edit || {
    echo "⚠️ 拉取冲突,请手动解决后重跑"; exit 1; }

# 3. 若有本机提交,推送回 Gitee(双向同步)
if [ -n "$(git log "$REMOTE/$BRANCH..HEAD" 2>/dev/null)" ]; then
    git push "$REMOTE" "$BRANCH" || {
        echo "❌ 推送失败"; exit 1; }
fi

echo "✅ 手机端同步完成!"

保存后加执行权限:

bash 复制代码
chmod +x ~/obsidian_sync_termux.sh

3.5 添加同步口令

编辑 ~/.bashrc(或 ~/.zshrc):

bash 复制代码
echo "alias obsidian='~/obsidian_sync_termux.sh'" >> ~/.bashrc
source ~/.bashrc

以后在 Termux 里输入 obsidian 回车,就自动同步。

若 alias 不生效(某些 Termux 版本),直接用 bash ~/obsidian_sync_termux.sh 也能跑。


4. 平板端

平板和手机完全一样:装 Termux + Obsidian,克隆同一个 Gitee 仓库,放同样的脚本和 alias 即可。三端共享一个 Gitee 仓库,谁改谁 push,其他人 pull 就跟上。


5. 日常使用规范(避免冲突的关键)

  1. 同步前先同步:开始写之前先跑一次同步,拿到最新内容。
  2. 写完就同步:离开设备前跑一次,把改动推上去。
  3. 大文件要谨慎 :图片、视频会撑大仓库。Gitee 免费仓库有容量上限(约 1GB),超了会警告甚至拒收。建议:
    • 图片尽量压缩后再放;
    • 超大视频不要进笔记库,用云盘分享链接代替。
  4. 冲突怎么办 :极少数情况两端同时改了同一文件,pull 会报冲突。常见两类:
    • 内容冲突 :同一文件两端都改了同一行,文件里出现 <<<<<<< / ======= / >>>>>>> 标记,手动编辑保留正确内容后 git add . && git commit 再 push。
    • rename/delete 冲突 :一端把文件移动/重命名了,另一端却删了它,git pull --rebase 会卡在 rebase 中间(见 FAQ 对应条目)。这种不能靠编辑文件解决,需 git rebase --abort 后处理。
  5. 不要在中转仓库里手改文件:Gitee 网页上直接编辑笔记容易和本地冲突,尽量只在本地 Obsidian 里改。

6. 常见问题(FAQ)

Q:push 时报 Failed to connect to gitee.com port 443 via 127.0.0.1 A:你的 git 配了失效的全局代理。清除它:

powershell 复制代码
git config --global --unset http.proxy
git config --global --unset https.proxy

Q:手机端报 Permission denied A:脚本放在了 ~/storage/shared/ 外部存储下,安卓禁止执行。移到家目录:

bash 复制代码
mv ~/storage/shared/Download/Obsidian_日记/obsidian_sync_termux.sh ~/

Q:git status 显示一堆 .obsidian 文件的改动? A:这些配置目录被追踪了。从索引移除:

powershell 复制代码
git rm --cached -r .obsidian .trash
git commit -m "停止追踪配置目录"

并确保 .gitignore 里有 .obsidian.trash

Q:每次 push 都提示输入密码? A:你用的是 HTTPS 地址。改用 SSH:

powershell 复制代码
git remote set-url gitee git@gitee.com:你的用户名/obsidian.git

Q:仓库太大,Gitee 警告超 80% 配额? A:历史里混进了大文件(如 Obsidian 程序、视频)。短期可用,长期需清理历史大文件(用 git filter-repo 或 BFG),或新建干净仓库重新推。

Q:手机端同步报 CONFLICT (rename/delete) 卡在 rebase 里? A:这是双端同步最容易遇到的冲突类型。典型报错:

go 复制代码
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:

bash 复制代码
cd ~/storage/shared/Download/Obsidian_日记
git rebase --abort

若仍报 there is already a rebase-merge directory,说明 git 的内部状态卡住了,手动清除:

bash 复制代码
rm -fr .git/rebase-merge

第 2 步,确认已退出 rebase 状态:

bash 复制代码
git status

正常应显示分支状态,不再提示 "rebase in progress"。

第 3 步,以远程为准覆盖本地(前提是电脑端已是最终正确状态且已推到 Gitee):

bash 复制代码
git fetch origin
git reset --hard origin/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 对"文件名改动(移动/重命名)"特别敏感,双端对同一文件做不同操作时极易冲突。预防措施:

  1. 一端重命名/移动文件后,先同步一次,等其他端拉取到位,再在另一端操作该文件。
  2. 手机端脚本可把 git pull --rebase 改为 git pull(普通 merge),冲突时生成合并提交而非卡住;或手机端只拉不推(除非真在手机写了新笔记)。
  3. 大批量整理文件(如把 日记/ 整体改名 05-日记/)时,先在一端完成并推送,再在其他端同步,避免双端同时整理。

7. 进阶:让电脑自动同步(可选)

不想每次手动跑,可以让 Windows 定时任务帮你推。以管理员身份运行 PowerShell,执行:

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(防脏、防冲突的灵魂配置)
相关推荐
渣波3 小时前
React Hooks 核心基石:深度解析 `useState` 的类型推断、泛型约束与空值安全
前端·typescript
YIAN3 小时前
吃透这 5 个核心点,你的 React+TS 代码直接上一个台阶
前端·react.js·typescript
Lear3 小时前
Vite+Vue3 模块自动导入实战:彻底告别繁琐的 import 语句
前端
Csvn3 小时前
📌 position: sticky 失效的 6 个经典坑:明明写了 sticky,为什么就是不吸顶?
前端
恋猫de小郭3 小时前
Flutter 的另外一种形态?社区 DartNative 要来了。
android·前端·flutter
秋天的一阵风3 小时前
🔥 Network 里那坨 "data:" 我真看吐了,自制开源 Chrome 插件,AI 流式调试直接开挂
前端·人工智能·后端
看到我请叫我铁锤3 小时前
vue编写web端在线预览文档
前端·javascript·vue.js
Ratten3 小时前
【Vben 解决】---- 跨页复选获取选择数据
前端
ssshooter3 小时前
为什么明明只有一个 12px 的小元素,父容器却有 63px 高?
前端·javascript·面试