找回密码
 立即注册
首页 业界区 业界 使用 Joplin + Git + Gitee 实现笔记的多端同步 ...

使用 Joplin + Git + Gitee 实现笔记的多端同步

氛疵 前天 22:15
1-远程仓库环境准备

1.1-注册 Gitee 账号

由于使用 Git 作为版本控制工具,所以只要是 Git 支持的托管平台都是可以的。比如 Github、Gitlab。这里使用 Gitee 主要是考虑到安卓端访问 Gitee 更容易。
1.2-创建远程仓库

创建一个远程仓库,用于存放笔记文件。
2-本地仓库环境准备

多端同步的核心工具是 Git,因此首先要在每个需要同步的平台上配置好 Git 环境。
2.1-安装和配置 Git

PC 端安装和配置 Git 非常容易,因此不再赘述了,这里主要说一下安卓端。
Git 没有直接提供 Andriod 端的版本,所以需要借助 Termux 这个安卓平台上的终端模拟器来安装和运行。
使用 Termux 还有一个特点就是很多操作和 Linux 平台上都是一致的,比如后面要使用 bash 脚本进行本地和远程仓库之间的同步操作,Linux 和 安卓端可以使用除了路径信息不一样外完全相同的脚本。
因此首先要安装 Termux
2.1.1-安装 Termux

Termux 可以通过 F-Droid 或者从 Github 下载安装包来安装。
2.1.2-为 Termux 获取设备存储访问权限

由于安卓环境的特殊性,Termux 本身是没有安卓设备存储的访问权限的,因为后续要对本地仓库文件夹进行一系列的操作,所以这一部是非常必要重要的。

  • Termux 中执行以下命令:
    termux-setup-storage
  • 之后手机会提示授权,同意即可。
之后,Termux 会在 ~ 目录(~ 是 Termux 默认用户的 Home 目录,对应于手机存储的实际的 /data/data/com.termux/files/home 目录)下创建几个目录来映射手机对应的目录,当然,都是在 /storage/emulated/0 之下的目录。具体映射情况如下表:
Termux 中的路径手机存储中的实际路径说明~/storage/shared/storage/emulated/0相当于手机的默认用户的 Home 目录。~/storage/downloads/storage/emulated/0/Download从系统浏览器等应用下载的文件默认保存目录。~/storage/dcim/storage/emulated/0/DCIM相机捕获的图片和视频的常规存储目录。~/storage/pictures/storage/emulated/0/Pictures用户可访问的图片存储目录。~/storage/music/storage/emulated/0/Music用户音乐列表中的音频文件存储目录。~/storage/movies/storage/emulated/0/Movies用户可访问的电影存储目录。~/storage/external-1外部存储卡路径(如果存在)如果设备有外部存储卡,此目录会映射到外部存储卡的 Termux 私有文件夹。这里重点需要关注的是 ~/storage/shared -> /storage/emulated/0
总之,就可以在 Termux 中使用映射的路径来访问手机的目录了,包括后续在 Termux 中访问、git 操作、bash 脚本中都使用映射的路径来访问。
2.1.3-在 Termux 中安装 Git

Termux 的默认包管理器是 pkg。习惯上,在使用包管理器安装特定的包之前,首先应更新软件包索引

  • 更新 pkg 软件包索引。
    Termux 中输入以下命令:
    pkg update
  • 安装 Git
    Termux 中输入以下命令:
    pkg install git
至此,安卓平台的 Git 就安装完成了。
2.1.4-配置 Git 用户信息

配置本地 Git 的 user.nameuser.email 信息,这对于 Git 的推送操作来说是必不可少的。
Termux 中输入以下两条命令:

  • git config --global user.name "your name"
  • git config --global user.email "your@email.com"
其中,

  • config 表示此命令用于配置一些东西;
  • --global 表示配置全局信息,即配置的内容对当前用户下的所有本地 Git 仓库都生效,这不是必要的,但没有特殊需求的话推荐这样做;
  • user.name 和 user.email 是所要配置的对象,对于推送操作来说,这两个信息是必不可少的;
  • 最后的字符串是配置的内容,一般与代码托管平台上的信息相一致。
2.2-配置 SSH 密钥

创建 SSH 密钥是为了使用 SSH 协议更方便快捷的对远程仓库进行拉取推送
SSH 密钥是一种加密技术,一个 SSH 密钥包含一个公钥和一个私钥,公钥用于公开给别人,别人使用此公钥加密后的数据,只有对应的私钥能解密。因此,SSH 加密技术通常用于单向通信。
在每个平台上都需要生成一对 SSH 密钥。

  • 生成 SSH 密钥
    每个平台生成 SSH 密钥的命令基本是一致的:
    ssh-keygen -t rsa -C "注释信息"
    其中,

    • ssh-keygen 是 OpenSSH 提供的一个用于生成 SSH 密钥对的工具;
    • -t rsa 指定了密钥的类型或者说使用的加密算法;
    • -C "注释信息" 指定了密钥的注释信息,这不是必要的,但通常的做法是用自己的邮箱地址作为注释信息。

输入命令后一路回车即可。

  • 将每个平台的公钥添加到托管平台上
上一步生成后在 ~/.ssh 目录下会有 id_rsa 和 id_rsa.pub 两个文本文件,其中,id_rsa 里存的是私钥,id_rsa.pub 里存的是公钥,将每个平台上的 id_rsa.pub 文件中的内容分别复制,并添加到托管平台的 SSH 公钥列表中。
2.3-创建并配置本地仓库

2.3.1-创建本地仓库


  • 首先分别在每个平台上,创建好用于存放笔记的文件夹,建议使用统一的名字,如 Joplin。
安卓端,为了 Joplin 软件以及你自己能够方便的访问,建议将目录创建在 /storage/emulated/0 之下,比如 /storage/emulated/0/Joplin。

  • 初始化 Git 仓库,进入仓库目录,输入以下命令:
    git init .
  • 配置远程仓库的链接
首先应获取远程仓库的 SSH 链接,建议复制粘贴,以免错误。在远程仓库的页面中就可以找到,注意要找的是 SSH 链接,应该类似下面这个样子:
git@gitee.com:mtueih/joplin.git
在仓库目录中,输入以下命令:
git remote add origin "git@gitee.com:mtueih/joplin.git"
注意将后面的链接替换成你的仓库的 SSH 链接。
★【针对安卓端】将仓库目录添加到 Git 的安全目录列表中
处于对安全的考虑,当执行一个 Git 操作时,如果操作的目标仓库的所有权不属于执行此操作的用户,这个操作不会被执行,并且 Git 会给出错误信息。简而言之就是 Git 只允许对属于的仓库执行操作。
Termux 环境中,通常都是以其默认用户的身份执行 Git 操作的,而创建在 /storage/emulated/0 之下的 Git 仓库的所有权并不是 Termux默认用户的,而是手机的默认用户的,或者说是因为此仓库的路径在 Termux 的默认用户的 Home 目录之外,这就会导致前述问题。
如前所述,将仓库目录创建在 /storage/emulated/0/Joplin 是迫不得已,所以有两种解决办法,一是修改仓库的所有权,二是将仓库目录添加到 Termux 的默认用户的全局 Git 配置的安全目录列表中。这里使用第二种方法。
在 Termux 中执行以下命令:
git config --global --add safe.directory /storage/emulated/0/joplin
这里注意将后面的仓库路径修改为你的仓库的实际路径,经实验,在此处使用 Termux 所映射的绝对/相对路径(/data/data/com.termux/files/home/storage/shared/joplin 或 ~/storage/shared/joplin),和手机存储的实际路径(/storage/emulated/0/joplin),三者都是可以的,但是在没有解决这个问题之前执行 Git 命令,Git 给出的错误消息中,使用的是 /storage/emulated/0/joplin,至于为什么,咱就不得而知了。
至此,远程和本地仓库的环境就准备好了。接下来就需要设置 Joplin 以让其将同步内容输出至本地仓库文件夹了。
3-设置 Joplin 的同步路径

这一步在每个平台上的步骤都差不多,进入 Joplin 关于同步的设置,将同步目标改为文件系统,然后输入/选择之前创建的仓库路径即可。
如需加密,需要在每个平台上设置相同的主密码。
4-通过脚本简化同步流程

至此三端的同步其实已经搭建好了,但每次都要敲一大堆命令来同步实在是,尤其是在安卓端。另外我们可能需要,自动,定时触发同步操作,因此就不得不借助脚本。

由于操作系统之间的父子关系,实际上只需要为不同的平台编写两个脚本(当然,每个平台可能有细微的差异)就好:Powershell 脚本(什么?
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册