解决 gistore 备份数据中的 git 库(submodule)的备份
昨天在从客户现场回公司的路上,想明白了 Gistore 备份出现的 AM 标识的备份数据就是含有变更的子模组。
之前 Gistore 不能解决的一个备份问题是,当备份的数据中包含 git 库,备份数据将不会保存在 gistore 版本库中,而是以 submodule 方式加入备份库。实际的效果是,数据没有备份下来。例如:
- 安装了 etckeeper,用于维护 /etc 下配置文件的变更。实际上 /etc 目录本身已经是一个 git 库了 如果在 gistore 任务建立前,/etc 目录已经 git 化,则不能有效的对 /etc 进行备份
- 某个备份数据的目录,被人为的 git 化。这可能是在 hacking 时遗留的 git 库 我在改动服务器的某些数据(如界面模板等),经常将目录 git 化,然后再修改/比较/提交
- 删除已经按照子模组方式添加的目录 git --git-dir=repo.git rm --cached sub/module ...
- 在子模组目录下创建一个临时文件,并添加该临时文件 git --git-dir=repo.git --work-tree=run-time add sub/module/<TMPFILE>
- 对子模组目录执行添加操作 git --git-dir=repo.git --work-tree=run-time add sub/module
- 别忘了删除临时文件 git --git-dir=repo.git --work-tree=run-time rm sub/module/<TMPFILE>
- 迭代执行,直到没有子模组发现为止
- 我们在公司服务器上创建了一个名为 wordpress 的任务,备份 wordpress 数据库导出文件,wordpress 配置文件,wordpress 插件目录,wordpress 上传图片及附件。
- 将 wordpress 任务的 git 库,加入 git 服务器中,并设置权限
- 每个有权限的公司员工,都可以使用 git 命令克隆/同步公司服务器上的 wordpress 版本库,将博客数据保存下来