让ANT仅传输新/更改的文件到scp

5
我想优化我的scp部署,目前它会复制所有文件,但我希望只复制自上次构建以来发生更改的文件。我相信在当前设置下应该可以实现这一点,但我不知道如何做。
我的目录结构如下:
Project/src/blah/blah/ <---- 我正在编辑的文件(大多数是PHP,在某些情况下还包括静态资源)
Project/build <------- 我有一个本地构建步骤,用于将文件复制到此处
我现在有一个scp任务,每当需要时就将整个Project/build复制到远程服务器上。
是否可能利用这个额外的“build”目录来实现我的要求 - 这意味着我只想上传src/**和build/**之间的差异。是否可能以ANT中的文件集形式检索它,然后进行scp?
我确实意识到这意味着如果我在服务器上删除/搞乱文件,ANT脚本将无法察觉到,但对我来说这没关系。

澄清一下,我希望它基本上能够执行常规复制任务的增量复制功能。 - Artem
2个回答

15

您可以使用modified标签,告诉ant scp仅复制自上次推送以来已经修改的文件,用法如下:

<scp trust="true" sftp="true"... >
  <fileset dir="${local.dir}">
    <modified>
      <param name="cache.cachefile" value="localdev.cache"/>
    </modified>
  </fileset>
</scp>
第一次使用此功能时,它将发送所有文件并缓存时间戳在param中声明的缓存文件中。之后,它只会发送已修改的文件。
在sftp模式下测试和验证过。

0

我认为你需要使用rsync。我找到了以下文章来回答你的问题。

简而言之,rsync会在上次中断的地方继续,并且可以通过ssh隧道传输。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接