title: 用 Git 在 Android 和 Windows 间同步 Obsidian 数据库
tags: [Obsidian, Git]
date: 2022-12-12 12:07:15
date modified: 2024-01-27 21:37:10用 Git 在 Android 和 Windows 间同步 Obsidian 数据库
如果你使用 Android 版 Obsidian,一个必须考虑的问题就是如何与电脑端同步笔记。
对此,诚然可以选择官方的 Obsidian Sync 服务,或者使用 Dropbox 等第三方同步工具,但我最推荐的还是使用 Git 同步。理由在于:
当然,用 Git 同步的方案也有局限,包括有一定的学习成本,对纯新手不友好;多设备同时编辑容易产生冲突;以及需要另行手动备份存档等。
但瑕不掩瑜,Git 仍然是我在 Windows 桌面端和 Android 端同步 Obsidian 的首选。本文就为大家介绍我的具体实现方案。
(注:行文简洁起见,本文假定读者掌握命令行环境的基本操作,对于 Git 的功能和机制有初步了解。如果你不了解Git,那么本文食用起来可能会比较困难,不妨先通过廖雪峰的 Git 教程简单学习后再来尝试。)
在开始之前,请确保自己的 Windows 系统中已经安装了 Git。如果还没有安装,可以参考廖雪峰的教程。如果你已经安装了,那么可以跳过这一步。
接下来,我们在自己选用的 Git 托管平台上新建一个笔记专用仓库。
考虑到国内用户的访问便捷程度和中文支持,本文将主要使用国产服务 Gitee 演示(官网注册链接),并简单说明更为主流的 GitHub 平台的对应操作。

接着,我们需要生成一个 SSH 密钥(SSH Key),用于在本地和远程 Git 仓库同步时验证身份。
为方便新手用户,我准备了一个配置脚本,按照如下步骤运行即可完成配置:
.txt)文档;.sh 并保存,双击执行脚本。#!/bin/bash
splitLine="====================================================="
userName="这里改成你的用户名"
email="这里改成你的Email"
# 配置 git 用户名和邮箱
git config --global user.name ${userName}
git config --global user.email ${email}
git config --global --list
echo "Enter 或者 y 键确认"
ssh-keygen -t rsa -C "${email}"
# 打印公钥
echo "复制保存下面的公钥添加到远程仓库"
echo ${splitLine}
cat ~/.ssh/id_rsa.pub
echo ${splitLine}
echo "按任意键退出"
read -n 1
echo "继续运行"
注意:
y 回车即可。
脚本执行完后,将分割线里面的内容复制出来保存好。后面会用到。
如果你希望自己动手完成配置过程,下面介绍手动配置方法,这与前述脚本是等效的。
在空白位置点击鼠标右键,选择 Git Bash(或者用你习惯的其他终端模拟器,如 Windows Terminal 等访问 Bash 亦可):

在弹出的 Bash 窗口中,输入下面的命令配置用户名:
git config --global user.name 你的用户名
以及用下面的命令配置邮箱:
git config --global user.email 你的邮箱
完成前两步后,可以用下面的命令检查是否配置成功:
git config --global --list
如下图所示,如果返回的结果正确显示了你输入的用户名和邮箱,说明配置是正确的:

接着,输入下面的命令生成 SSH Key。参考上面脚本教程的截图,按四个回车即可。
ssh-keygen -t rsa -C "你的邮箱替换中文"
最后,用如下命令显示生成的公钥,将其复制出来备用:
cat ~/.ssh/id_rsa.pub
下面,我们将生成的 SSH 公钥上传至 Git 托管平台。

下面,我们在本地配置用于同步的 Obsidian 笔记文件夹。
从 Gitee 或 GitHub 网页端访问刚才新建的仓库,由于尚未初始化,网页上会展示下图所示的配置指引:

这里,我们按其中的「创建 Git 仓库」一节配置。
具体而言,进入你用作 Obsidian 笔记库的文件夹,进入后在空白处点击右键进入 Bash,依次执行如下命令:
touch README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin "替换为上图中本条命令位置提示的远端地址(形如 git@gitee.com:user/repo.git)"
git push -u origin main
完成了本地仓库的配置,接下来要解决的就是在本地和远端之间推送和拉取笔记文件。这里,固然可以定期、手动通过命令行的 git 命令来同步,但那未免繁琐。
笔者惯用的方式是使用 GitKraken。这是一款免费、图形界面的 Git 管理工具。

安装后,先点击左上角的文件夹图标,选择本地 Obsidian 笔记库打开。然后即可通过工具栏按钮快捷地同步,或者在主界面中追踪同步历史等。

除了用 GitKraken 外,你也可以通过 Obsidian Git 插件,直接在 Obsidian 内部完成仓库的同步。
Android 端的配置相对简单,除了 Obsidian app,只需要另外安装一个 Git 客户端即可。
Obsidianplay.google.com
这里,我推荐使用 MGit,它是笔者能找到的最符合个人需求的 app;其他的如 GitJournal 等 app 多少有些小问题。如果你有更好用的推荐,欢迎在评论区分享。
MGitplay.google.com
MGit 的配置步骤如下:


成功之后,打开 Obsidian for Android。一般来说,Obsidian自动扫描到你克隆到手机的工作空间。如果没有扫描到,那么手动从 Obsidian 进入上述步骤设置的仓库路径,用作工作空间即可。

细心的朋友可能已经看出来了,就是 Obsidian 的工作空间在PC和手机上都是通用的。这方面要为 Obsidian 的开发团队点赞。
不过,个人不建议在手机端编辑文档。因为手机端屏幕太小影响体验和发挥,只负责查阅即可,编辑还是放到 PC 端比较好。
如果大家对本文方案有什么更好的建议,可以在评论区提出。