背景:为什么会有这么奇怪的一个需求?这是由于仓库内容来源不同导致的。如下图所示,我在 GitHub 上创建了一个图片仓库,原先设计是全部用于保存 OmniGraffle 的原稿。但是最近想把 iThoughtsX 的思维导图也上传上去,这时候就出现了一个问题:如果我把 iCloud 云盘上的思维导图都剪切到 diagram 目录下完全交由 git 管理,在 iPhone 上就无法直接通过文件 App 阅览这些照片。

图片仓库
图片仓库

那么有什么完美的方案既能把思维导图的文件夹上传到 GitHub 仓库又可以让它保留在 iCloud 云盘上吗?有,下面就来介绍使用 svn 和 git 协作实现这个功能。

整体思路

  1. 剪切思维导图剪切到 git 文件夹
  2. 上传思维导图到 GitHub 仓库
  3. svn checkout 到 iCloud 云盘
  4. 使用 svn 管理更新思维导图文件夹

配置 svn

svn 的代理需要单独使用配置文件进行配置,具体方法如下:

➜ vim ~/.subversion/servers
[global]
http-proxy-host = 127.0.0.1
http-proxy-port = 你的代理软件端口号
http-proxy-compression = no

:wq

剪切思维导图剪切到 git 文件夹

截屏2021-04-01 下午8.14.29

上传思维导图到 GitHub 仓库

gaa gcsm gp 行云流水地打完三条命令,上传完成

svn checkout 到 iCloud 云盘

在终端里切换到 iThoughtsX iCloud 云盘目录,查询远程仓库目录

 → svn ls  https://github.com/JamesHopbourn/diagram/trunk
......
svg/
少数派/
桌面电源布置/
......

桌面电源布置就是需要 checkout 的子目录,将其 checkout 出来

➜ svn checkout https://github.com/JamesHopbourn/diagram/trunk/桌面电源布置
A    桌面电源布置/LED 灯条.itmz
A    桌面电源布置/LED 灯条.png
A    桌面电源布置/OPSO 智能插座.itmz
A    桌面电源布置/OPSO 智能插座.png
A    桌面电源布置/公牛魔方插座.png
A    桌面电源布置/墙面插座.itmz
A    桌面电源布置/墙面插座.png
A    桌面电源布置/整体概览图.itmz
A    桌面电源布置/网络布局.itmz
A    桌面电源布置/网络布局.png
Checked out revision 106.

使用 svn 管理更新思维导图文件夹

如果思维导图内容发生改变,同样需要在 iCloud iThoughtsX 目录下使用 svn 更新

➜ svn status
M       墙面插座.itmz

➜ svn add *
这条命令执行之后的报错都不需要理会

➜ svn commit -m "墙面插座"
Sending        墙面插座.itmz
Transmitting file data .done
Committing transaction...
Committed revision 107.

其他:文件夹快速跳转

因为文件夹是使用中文命名,所以 autojump 插件还需要切换到中文输入法才能快速跳转,这样非常地不方便。可以使用 wd 插件解决这个问题,编辑 zshrc 配置文件添加自带的 wd 插件

➜ vim ~/.zshrc
plugins=(... wd)

:wq

➜ source ~/.zshrc

切换到桌面电源布置的 iCloud 目录下,使用 wd add 标签名 对当前目录标记之后以后想要快速跳转到改目录只需要输入:wd 标签名 即可。

➜ wd add pow
 * Warp point added

➜ wd list
wd list
 * All warp points:
   pow  ->  ~/Library/Mobile Documents/iCloud~com~toketaware~ios~ithoughts/Documents/桌面电源布置

其他:关于文件更新

当 iCloud 云盘中的子目录更新之后,每次在需要对 git 管理的目录进行编辑操作之前都需要进行 git pull 同步子目录的内容,建议子目录的内容全部使用 svn 进行管理,其他目录仍旧使用 git 管理,避免造成混乱。

 

8
1