基於Git的文件自動同步的思考和實現
我相信很多有兩台電腦以上的人會碰到這種情況:對一台電腦上的軟體配置做了相應的改動,由於沒有一個高度自動化的方法來同步這些文件,所以在另外一台電腦上的配置還是舊的。
舉個栗子:比如我在工作電腦上對Sublime的自定義鍵的設置做了改動,用的很順手,回家後在自己電腦上卻還是之前老的配置,這樣用起來便會不太順手了。
有人可能會說可以用Dropbox、iCloud之類的雲盤工具來同步,對於大多數普通用戶,它們已經足夠了。但是針對技術人員,它們有兩個缺點:
- 需要手動將文件移動到同步目錄下
- 不能對文件的改動做記錄和回滾改動
本文將提出一個針對以上問題的簡單的解決方案,並附上此解決方案的一個開源實現。
思路
我們將分別對之前提出的缺點進行分析。
需要手動將文件移動到同步目錄下
關鍵在於去除手動的過程,因為我們在修改某個軟體配置時,並不會記起還要把這個配置文件放到同步盤裡去。
需要對待同步的文件持續保持監控,一旦它們有變化,則把它們複製到同步目錄去。
Python的Watchdog模塊可以實現這一點,此外,它還是跨平台的。
接下來我們只需要在系統啟動的時候自動運行這個監控腳本即可。
不能對文件的改動做記錄和回滾改動
這個功能其實就是一個版本管理器。我們沒有必要造輪子,直接選用Git即可。
每當監控腳本監測到文件改動時,我們就可以把改動的文件複製到一個本地的Git倉庫,然後貯存,提交,推送到遠端即可。
遠端的倉庫有各種免費的解決方案,比如最大的Git託管商Github。
綜上,整個同步過程是免費而且完全自動化的。
實現
基於上述思路,我用Python實現了一個簡單的工具來做了上述的兩件事。
我在README里做了詳細的使用說明,目前在OS X和Windows下通過測試。
通過這個工具,我可以做到只要修改想要同步的配置文件,什麼都不做,配置文件可以自動同步到Github,而且每一次改動都會被記錄。
代碼託管於Github:https://github.com/iWoz/file_sync
推薦閱讀:
※Python在unpacking上的一個小陷阱
※用 Python 玩轉 Facebook 數據
※Tornado 非同步非阻塞淺析