背景
往往有些资料对我们来说很重要,既想备份它,又想保留不同的历史版本,以便不时之需。比如我现在写作的文档,一方面怕原始文件丢失,丢了以后我怎么修改,难道把它从博客、头条号上扒下来再编辑一次;另一方面又怕搞乱了,乱了之后原始插图就乱了,还得编辑。
既然需求有了,那就需要解决办法。在这之前,我尝试了不同的办法:
- 直接使用
git
,在本地或网页上编辑。这种办法很直接,但也很弱鸡。而且由于缺少写作软件的参与,在写作上非常难受,贴图也无法实现; - 使用
wiki.js
或Wordpress
。我相信不少人采用这种方式,这样版本管理有了,数据库也可以直接备份。但是网页工具毕竟是网页工具,其功能性与桌面写作软件还是无法相比的。比如图片插入,只能先上传再插入,无法直接贴图,蛋疼得很。 - 再就是使用桌面版写作软件,但是这些一般都没有版本管理,备份也只能靠自己手动完成。
接下来我们看看怎样使用git
+crontab
来实现自动化的版本管理与备份
Gitea
这一节不是必要的,可以使用本地或远程文件夹来代替
git
仓库。
如果你想使用
Github
或Gitee
来管理自己的资料库,也可以直接跳过这一节。
使用git
来实现版本管理,我们需要一个git
仓库,选择Gitea
是因为它足够小巧精悍,提供的 web 端操作习惯与Github
相似,没什么学习成本。
这里,我们选择使用Docker
来部署Gitea
:
|
|
这里需要特别提醒的是,默认一般只挂载/data
,但是我们建议单独挂载/data/git
,将数据与配置分离开(保持好习惯),以防万一。因为我们在配置Gitea
的时候需要直接进入/data
修改app.ini
等文件,这给了我们犯错的机会,将数据与配置分开,可有效防止出错。
至于app.ini
,这里就列出一些重要、让人容易迷糊的部分:
|
|
说明:
- DOMAIN:网页访问使用的域名,不需要端口号,主要用于
Gitea
内部判断用; - HTTP_PORT:容器监听的端口,因为上面配置中
ports
的存在,与实际访问端口没有必然联系; - ROOT_URL:
git clone
时使用的实际url
; - DISABLE_SSH:开启
ssh
主要为了免密,但实际上现在桌面操作系统也可以通过credential.helper
实现https
协议的免密操作; - SSH_DOMAIN:
git clone
使用ssh
协议时的主机名或 ip; - SSH_PORT:
git clone
使用ssh
协议时的端口号; - SSH_LISTEN_PORT:容器监听的端口号,和
HTTP_PORT
情况类似;
Nignx反向代理
如果只是本地使用,这一节也不是必要的,可以直接跳过。
这里没有什么可以多说的,使用反向代理一方面方便使用,另一方面也可以提供外网访问,对于移动工作者来说是非常实用的。另外,Gitea
进入后一片青青草原,我们增加proxy_pass http://127.0.0.1:3000/explore/repos;
这条规则,使得用户默认进入仓库列表界面。
|
|
我们也可以使用NginxProxyManager
(《好物推荐 - NginxProxyManager》)来设置反向代理,更方便快捷。
Git 仓库
由于我个人使用MWeb
来编辑文章,下面就以MWeb
为例。
配置好Gitea
之后,我们创建一个名为MWebLibrary
私人仓库作为MWeb
文档库使用。当然,这里要求我们本机必须安装好git
工具:
|
|
克隆仓库:
|
|
如果不使用Gitea
,我们可以在本机或网络邻居上合适的位置初始化一个git
仓库:
|
|
接下来就可以像正常仓库一样进行克隆操作:
|
|
接下来就只需要将MWeb
文档库切换至刚克隆的MWebLibrary
目录。这里值得一提的是,MWeb
切换文档库需要目标位置含有mainlib.db
这个文件。所以,我们先点击在Finder中显示
,找到原有文档库,将其中所有文件拷贝到新位置,再进行文档库切换操作。
手动上传更改 :
|
|
到这里,我们基本已经实现了资料库的版本管理与备份操作。
这里使用
git
只是实现版本管理,并不需要关心内容,更不需要关心文章中的链接是否可以正常显示,这与直接使用git
来管理文章是有差别的。
定时任务
crontab
是Linux
下的定时任务管理工具,当然macOS
下同样也可以使用。在设置定时任务前,我们需要一个小脚本来帮我们上传更改:
|
|
将下面的内容添加到commit.sh
中:
|
|
接下来给commit.sh
添加可执行权限:
|
|
最重要的部分来了,使用crontab
来设置定时任务,帮助我们自动提交文档到MWebLibrary
仓库:
|
|
我们设置的是每一小时自动提交一次。每当我们写了新的文章或做了修改,crontab
都会自动帮我们提交到仓库中。如果哪一天修改了文章,发现改得还不如以前的好,我们就可以从git
的历史提交中把旧版本拉出来。
关于crontab
执行时间说明:
|
|
每个部分的时间格式为A/B
,其中分子A
表示第几
的意思,分母B
表示间隔
的意思,两部分不同时使用,分母B
可以省略。
结束语
我们这里以MWeb
为例讲述了文章的自动化版本管理与备份,自然其他软件和资料也是通用的。整个过程看起来很复杂,但其中99%的操作都只需要做一次,而且一个好的写作环境对于创作者来说真的太重要了,为此花点时间也是值得的。而且一旦设置好了,所有操作都是自动的,不再需要人为干预,因此也节省了很多的时间与精力。
其实我们写作的痛点还有一个没有解决,就是图片资源的提交。下期我们将介绍如何使用私有图床来方便我们的文章发布过程。