U盘GIT仓库同步系统开发规划

增强版xugit(V5.2)发布

  • 2024-05-09 16:37 完成增强版xugit.sh, 安装后命令仍然为ugit. 后期如果没有重大bug, 尽量不再升级了,因为科研工作紧张。欢迎大家使用增强版xugit.sh, 欢迎反馈您的意见.

  • 2024年05月09日, 完成了增强版U盘同步程序xugit.sh. 写这支程序的动机是为了解决文件夹误删除,同时如果被改名时能够智能找回或重建,此版采用uudi来唯一识别主机上的HOME挂载硬盘和相应的U盘, 它不依赖于U盘和仓库的名称来识别设备,所以可以自动校准电脑和U盘上的仓库,所以我称之为增强版。同时在实现逻辑上比之前的版本也进步了一大截,所以无特别需求的话,您应当下载使用增强版xugit.sh, 安装后其命令仍然为ugit, 使用ugit -h查看帮助信息。

  • 此版,将同步网络的配置内容保存于U盘仓库,不受主机限制,所以配置一次即可走遍天下。同时,也取消了对本地~/.ugitmap的引用,专而将其建立在U盘端,这也可以避免受限于本地,所以更加合理。

  • 增强版还优化了命令,强调易用性,对于同步的和操作实现自动化,仅保留几项常用的操作,所以它更加实用。

  • 为了保留近二十多天的劳动成果,所以同时保存了三个版本的程序,也可以作为大家学习之用,但是未来本人将只维护xugi.sh,同时由于实现逻辑上的巨大差异,增强版xugit.sh直接升级至V5.0, 2024年05月09日版本号V5.2.

ugit V4.0 存在的问题

已经开发成功了ugit软件,基本实现U盘上建立GIT仓库,并且同步到不同电脑。其实现原理为:在U盘上建立仓库,然后在本地电脑写入本地目录U盘仓库的对应关系,然后实现同步。但是这种情况存在问题也是比较严重的,下面说明:

  • 本地仓库名称有可能被用户改变,这种情况下导致本地记录文件.ugitmap的一系列记录失效,因为这些路径不存在。

  • 最初对本地仓库命名时,使用U盘名称@UGIT的模式,如果用户使用了另一个同名的U盘, 尽管通过比对U盘的UUID可以识别出这不是之前的源仓库,但是在本地建立仓库时就会和之前的U盘名称@UGIT冲突。

  • 如果某用户误删除了.ugitmap文件,但是原来建立的仓库还存在,于是在执行同步的时候ugit就无法取得本地和源仓库的对应关系。

ugit V4.1 的改进计划

硬件设备的唯一识别编号为UUID, Linux 让的所有文件识别的唯一编号为 inode, 于是通过这两者建立一一对应关系,就不会存在ugit V4.0的问题。需要做的应当是将.ugitmap删除,同时根据硬盘UUID和U盘UUID取得一一对应关系,同时将系统中的inode自动和U盘仓库建立一一对应关系。实现流程为:

  1. 读取U盘信息,将所有插入电脑的U盘UUID路径存入数组变量待用。

  2. 新的U盘仓库为空时,在该U盘建立映射文件.ugitmap, 加入防删除权限。如果在U盘仓库中已经存在仓库,则使用ls命令,建立仓库路径存入数组变量待用。

    .ugitmap 中记录了克隆过U盘仓库的电脑硬盘UUID和目标文件夹的inode

  3. 读对主机的硬盘信息,如果其不在.ugitmap内,此硬盘没有克隆过U盘仓库, 执行克隆操作,同时将本地上的文件夹inode记录到U盘中的.ugitmap. 如果其在.ugitmap内,则使用findinode/home/$USER内查找路径,建立本地map, 执行同步操作。

  4. 剩下的工作交给ugit V4.0原始程序处理。

  5. 2024-05-08 12:22 暂时记录到此。