基于Git的文件自动同步的思考和实现

我相信很多有两台电脑以上的人会碰到这种情况:对一台电脑上的软件配置做了相应的改动,由于没有一个高度自动化的方法来同步这些文件,所以在另外一台电脑上的配置还是旧的。

举个栗子:比如我在工作电脑上对Sublime的自定义键的设置做了改动,用的很顺手,回家后在自己电脑上却还是之前老的配置,这样用起来便会不太顺手了。

有人可能会说可以用Dropbox、iCloud之类的云盘工具来同步,对于大多数普通用户,它们已经足够了。但是针对技术人员,它们有两个缺点:

  • 需要手动将文件移动到同步目录下
  • 不能对文件的改动做记录和回滚改动

本文将提出一个针对以上问题的简单的解决方案,并附上此解决方案的一个开源实现。

思路

我们将分别对之前提出的缺点进行分析。

需要手动将文件移动到同步目录下

关键在于去除手动的过程,因为我们在修改某个软件配置时,并不会记起还要把这个配置文件放到同步盘里去。

需要对待同步的文件持续保持监控,一旦它们有变化,则把它们复制到同步目录去。

Python的Watchdog模块可以实现这一点,此外,它还是跨平台的。

接下来我们只需要在系统启动的时候自动运行这个监控脚本即可。

不能对文件的改动做记录和回滚改动

这个功能其实就是一个版本管理器。我们没有必要造轮子,直接选用Git即可。

每当监控脚本监测到文件改动时,我们就可以把改动的文件复制到一个本地的Git仓库,然后贮存,提交,推送到远端即可。

远端的仓库有各种免费的解决方案,比如最大的Git托管商Github。

综上,整个同步过程是免费而且完全自动化的。

实现

基于上述思路,我用Python实现了一个简单的工具来做了上述的两件事。

我在README里做了详细的使用说明,目前在OS X和Windows下通过测试。

通过这个工具,我可以做到只要修改想要同步的配置文件,什么都不做,配置文件可以自动同步到Github,而且每一次改动都会被记录。

代码托管于Github:https://github.com/iWoz/file_sync

关注微信公众号:timind

4 responses

    • 已知,谢谢。据我了解,针对个人Bitbucket也有免费的私有仓库服务

  1. 比方两个比较本 一个mac 一个Windows
    在mac本地某个文件夹放你vim的配置文件a
    用了这个修改自动同步的工具
    下次比方我用家里Windows机子的时候,先用git去远程仓库把自己本地的文件给更新了再使用?

    • 对。。这个工具只是用来自动同步修改的东西到远端备份,然后记录提交以便回滚,在另外一台机器上需要手动从远端拉取同步

回复 Tim 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注