我的Mac上有一些源代码,为了进行测试,我有兴趣将其与包含与生产环境相似的web服务器设置的VM同步。因此,我需要能够在每次有更改时自动将文件复制到VM。
我知道我可以使用rsync在脚本运行时手动执行此操作,但我需要一些方法让它在后台运行,每次在特定目录或其子目录中的文件被修改。
我知道Linux机器上存在inotifywait,可以解决这个问题。我还阅读了FSEvents API和kqueue。然而,这些似乎都不能从命令行访问,我真的不想花很长时间做一些事情来做这个…
我想我可以使用cronjob,但是一分钟是相当长的时间来等待看到一个网站的变化…
任何想法?
我一直这样做,在Windows/Linux/Mac工作站上开发,并将更改保存到远程Linux服务器,在那里它们立即返回到我工作站的浏览器进行测试。您有几个选项:
-
您可以在本地挂载远程文件(如通过sshfs)并直接对它们进行更改。例如,你的Mac认为文件是本地的,所以你可以用你的GUI编辑器编辑它们,但是当你File->Save时,它实际上是远程保存文件。这样做的主要缺点是当您与服务器断开连接时无法工作。
-
远程挂载本地文件。这将允许您在断开连接时在本地工作,但不允许测试站点在断开连接时工作——这可能不是什么大问题。如果您在远程服务器上没有正确的工具/访问权限,则此选项可能无法执行。
-
(我喜欢)。使用NetBeans IDE,它有一个非常好的"复制到远程"特性。您在本地维护所有文件的完整副本,并直接编辑它们。当你在一个文件上点击File->Save, NetBeans会将它保存在本地和透明地scp/ftp到你的远程服务器。
使用像git或mercurial这样的DVCS,让本地的repo运行提交后的钩子来运行rsync,然后再运行测试本身怎么样?
我有点困惑,为什么你不能从运行测试的同一脚本运行rsync。如果你运行rsync -e ssh
,你可以在VM和Mac之间设置自动公钥认证。在这种情况下,rsync不会有任何手动操作。
对于一个简单的设置,您可能能够设置一个启动代理来做您想做的事情。请参阅这个问题和启动的手册页。关于启动的WatchPath
键的更多信息。但是看起来WatchPath
可能不工作在子目录内的变化