基於Git的文件自動同步的思考和實現

我相信很多有兩台電腦以上的人會碰到這種情況:對一台電腦上的軟體配置做了相應的改動,由於沒有一個高度自動化的方法來同步這些文件,所以在另外一台電腦上的配置還是舊的。

舉個栗子:比如我在工作電腦上對Sublime的自定義鍵的設置做了改動,用的很順手,回家後在自己電腦上卻還是之前老的配置,這樣用起來便會不太順手了。

有人可能會說可以用Dropbox、iCloud之類的雲盤工具來同步,對於大多數普通用戶,它們已經足夠了。但是針對技術人員,它們有兩個缺點:

  • 需要手動將文件移動到同步目錄下
  • 不能對文件的改動做記錄和回滾改動

本文將提出一個針對以上問題的簡單的解決方案,並附上此解決方案的一個開源實現。

思路

我們將分別對之前提出的缺點進行分析。

需要手動將文件移動到同步目錄下

關鍵在於去除手動的過程,因為我們在修改某個軟體配置時,並不會記起還要把這個配置文件放到同步盤裡去。

需要對待同步的文件持續保持監控,一旦它們有變化,則把它們複製到同步目錄去。

Python的Watchdog模塊可以實現這一點,此外,它還是跨平台的。

接下來我們只需要在系統啟動的時候自動運行這個監控腳本即可。

不能對文件的改動做記錄和回滾改動

這個功能其實就是一個版本管理器。我們沒有必要造輪子,直接選用Git即可。

每當監控腳本監測到文件改動時,我們就可以把改動的文件複製到一個本地的Git倉庫,然後貯存,提交,推送到遠端即可。

遠端的倉庫有各種免費的解決方案,比如最大的Git託管商Github。

綜上,整個同步過程是免費而且完全自動化的。

實現

基於上述思路,我用Python實現了一個簡單的工具來做了上述的兩件事。

我在README里做了詳細的使用說明,目前在OS X和Windows下通過測試。

通過這個工具,我可以做到只要修改想要同步的配置文件,什麼都不做,配置文件可以自動同步到Github,而且每一次改動都會被記錄。

代碼託管於Github:github.com/iWoz/file_sy


推薦閱讀:

Python在unpacking上的一個小陷阱
用 Python 玩轉 Facebook 數據
Tornado 非同步非阻塞淺析

TAG:Python | Git | 自动化 |