Git实现Obsidian多端同步

本文对这个教程做一个补充.

挂载 Vault 到 iSH

创建挂载点:

1
mkdir -p /mnt/YourVaultName

交互式挂载:
1
mount -t ios /mnt/YourVaultName

选择 Vault 目录后验证:
1
2
cat /proc/mounts | grep /mnt/YourVaultName
ls -la /mnt/YourVaultName

常见问题:目录空 → 选错 / iCloud 未下载(在 Files 里先点开文件);重试:
1
2
umount /mnt/YourVaultName
mount -t ios /mnt/YourVaultName

卸载:
1
umount /mnt/YourVaultName


GitHub Personal Access Token(PAT)

生成(classic 推荐调试):repo 全选 → 得到形如 ghp_xxx 的 40 字符 Token。

首次拉取交互输入 Token:

1
2
3
git pull origin main   # 或 master
# Username: <GitHub用户名>
# Password: <粘贴 Token>

排查认证失败:
1
2
3
4
echo -n 'TOKEN' | wc -c      # 长度
echo -n 'TOKEN' | od -c # 是否多余空格
curl -I https://github.com/<username>/<repo>.git # 仓库可访问性
curl -H "Authorization: Bearer <TOKEN>" https://api.github.com/user

临时把 Token 塞进 URL(调试用,完成后改回):
1
2
3
git remote set-url origin https://<username>:<TOKEN>@github.com/<username>/<repo>.git
git pull origin main
git remote set-url origin https://github.com/<username>/<repo>.git

可选持久化(明文风险):
1
2
3
4
5
6
7
8
git config --global credential.helper store
# 或 ~/.netrc
cat > ~/.netrc <<'EOF'
machine github.com
login <username>
password <TOKEN>
EOF
chmod 600 ~/.netrc

注意:Password 就是 Token,不要输 GitHub 登录密码。


首次拉取未跟踪文件冲突

Obsidian Git典型报错:

1
Aborted. No upstream-branch is set!

原因:远程已跟踪,本地存在同名未跟踪文件。处理方案:

方案 说明 命令
A 丢弃本地配置,用远程 rm -rf .obsidian && git pull
B 备份本地后再拉取 mv .obsidian /tmp/obsidian_backup && git pull
C 先提交本地再合并 git add .obsidian && git commit -m "local"; git pull --allow-unrelated-histories
D 重新 clone mv vault vault_backup; git clone <remote> vault

是否跟踪 .obsidian
不想共享配置 → 移除并忽略:

1
2
3
4
5
git rm -r --cached .obsidian
echo ".obsidian/" >> .gitignore
git add .gitignore
git commit -m "Stop tracking Obsidian config"
git push


解决方案: 分支命名统一(master ↔ main)

远程与本地名称不一致会导致脚本混淆。常用操作:

本地改成远程的 master:

1
2
git branch -m main master
git push -u origin master

用 main 替换远程 master:
1
2
3
git push -u origin main
# 在 GitHub 仓库设置中修改默认分支为 main
git push origin --delete master # 可选

查看远程分支:
1
git ls-remote origin | grep refs/heads/