我正在使用Phing,现在我正在使用此代码将我的文件上传到FTP:
<target name="ftp.upload">
<echo>Uploading files to FTP</echo>
<ftpdeploy
host="${ftp.destination.host}"
port="${ftp.destination.port}"
username="${ftp.destination.username}"
password="${ftp.destination.password}"
dir="${ftp.destination.dir}"
mode="${ftp.destination.mode}">
<fileset refid="TheFiles" />
</ftpdeploy>
<echo>FTP Upload Finished!</echo>
</target>
加载需要很长时间,而且我有很多图像 - 因此每次我进行小的文本更改时,我都不希望它重新上传所有内容。有没有办法检测哪些文件已被更改,只上传那些文件?
谢谢!
答案 0 :(得分:8)
这有点晚了......但你实际上可以用Phing做到这一点。这需要几个步骤:
定义要离开的日期属性。当您为将来的构建保存最后构建日期时,这将是必要的
< tstamp> < format property="builddate" pattern="%m/%d/%Y" /> < format property="buildtime" pattern="%I:%M %p" /> < /tstamp>
定义lastbuilddate属性。将其定义为某种方式。然后包含一个具有相同属性的文件(将在运行结束时创建)。如果文件存在(第二次运行和之后),它将覆盖您使用上次日期
定义的设置< property name="lastbuilddate" value="01/01/1970 12:00 AM" /> < property file="$.\lastbuild.properties" override="true"/>
在文件集定义中包含 date 任务。这指定仅选择在上次构建日期之后具有上次修改日期的文件
&LT; fileset id =“TheFiles”&gt; &LT; date datetime =“$ {lastbuilddate}” 当= “后”/&GT; &LT; / fileset&gt;
运行您的ftp以获取TheFiles文件集
使用最新的运行日期更新lastbuild.properties文件。注意到我们正在使用最初定义的日期/时间属性。
< echo msg="lastbuilddate=${builddate} ${buildtime}" file="$./lastbuild.properties" append="false" />
每次运行目标时,它只会ftp自lastbuilddate属性中指定的日期以来更改的文件
答案 1 :(得分:2)
我担心除非您维护某种修改过的文件列表,否则无法使用FTP实现此目的。所以你最好使用rsync。有一种解决方案已经可用于phing:http://blog.fedecarg.com/2008/07/21/filesynctask-using-phing-to-synchronize-files-and-directories/
答案 2 :(得分:0)
我写下了一个用svn存储库执行它的perl脚本 (http://svnftpdeploy.sourceforge.net/ ......我不知道我用英文写的是什么)
它需要一个本地目录从svn获取文件,另一个从ftp获取文件(在下一个svn版本中更改),一个本地文件用于存储上次上传的svn版本,一个本地目录用于存储已更改的文件列表FTP。并且它会在发生冲突时以交互方式请求操作(某人在服务器中独立于部署脚本更改了文件)。
现在我转向phing和git,困难的部分是管理交互性,我想我会用-D =来管理目标部署(使用-Dconflictaction = stop,viewdiff,viewdiffanddeploy,忽略或者这样的的东西)。
答案 3 :(得分:0)
答案 4 :(得分:0)
您是否尝试过使用FtpDeployTask的depends="true"
属性?
如果depends设置为true,则任务将仅更新具有比服务器上相应时间戳更新的本地修改时间戳的文件。
可悲的是,这对我来说似乎不起作用:所有文件都在转移。