Wicky's Blog

Rsync文件实时同步

在我们开发项目,Coding的过程中,有下面几种开发模式:

  • 直接在服务器上开发,这样的优点是可以实时的修改程序调试,但是在涉及到多人开发的情况下,容易互相覆盖,同时开发效率也没有在IDE中高。
  • 在本地IDE开发完,全量同步到远程服务器,这样的问题是如果项目过大,同步时间过长。
  • 本地IDE开发增量同步,只将增量变化的文件同步。
    上面的方案三是最省事的,现在很多IDE默认支持通过SFTP来实现实时同步,和我们现在的方案其实差不多,由于在Mac下fswatch可以实时监控文件变化,Rsync可以实现同步文件。当然,你也可以自己实现一个server,通过http网络请求来完成,这里就不重复造轮子了。

fswatch和rsync

由于需要fswatch和rsync,在MacOS下只需通过一下安装:

1
2
brew install fswatch
brew install rsync

关于fswatch可以阅读这篇文章,rsync的使用方法也可以参考这篇文档。
Rsync 的特色:
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
安全:rsync 允许通过 ssh 协议来加密传输数据。
更少的带宽:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
特权:安装和执行 rsync 无需特别的权限
基本语法:rsync options source destination

排除不需要的文件

在开发过程中,在IDE中有一些配置文件或是我们不需要上传的文件,可以通过exclude参数过滤掉,如果是少量单个文件,可以如下使用:

1
rsync -rzluq --delete --exclude=".git/" xxx xxx

如果是针对多个文件夹,可以通过配置过滤文件的方式来实现:

1
2
3
4
5
6
7
8
rsync -rzluq --delete --exclude-from="ignore.txt" xxx xxx
## ignore.txt
1 # ignore folder
2 # don't need to sync to server
4 .git/
5 .svn/
6 .idea/

使用

安装及配置好上述之后,可以按以下方式运行:

1
auto-deploy LOCAL_FILE REMOTE_ADDR

下面是我的一个栗子:

1
2
3
4
5
Wicky@Wickys-MacBook-Pro:~/PhpstormProjects/lianjia_weixin$ auto-deploy /Users/Wicky/PhpstormProjects/lianjia_weixin/ /data0/www/htdocs/weixin.lianjia.com/
------------Start Sync File-------------
Current directory:/Users/Wicky/PhpstormProjects/lianjia_weixin/
Destination:/data0/www/htdocs/weixin.lianjia.com/
/Users/Wicky/PhpstormProjects/lianjia_weixin/application/controllers/Api/User/List.php was rsynced

以上为所有流程,源码可以参考autoSync