2011-10-11 104 views
5

我使用Phing和現在我使用此代碼到我的文件上傳到FTP: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> 

這需要很長的時間來加載,我有很多圖像 - 所以每次我做一個小小的文字改變時,我都不希望它重新上傳所有內容。有沒有辦法檢測哪些文件已被更改,只上傳這些文件?

謝謝!

回答

8

這有點晚了...但你實際上可以用Phing做到這一點。這需要幾個步驟:

定義要離開的日期屬性。這將在年底是必要的,當你節省一次創建日期爲將來的版本

< tstamp> 
    < format property="builddate" pattern="%m/%d/%Y" /> 
    < format property="buildtime" pattern="%I:%M %p" /> 
< /tstamp> 

定義lastbuilddate財產。將其定義爲某種方式。然後使用相同的屬性包含一個文件(將在運行結束時創建)。如果文件存在(第2輪之後),它將覆蓋您所定義的任何最後日期是設置

< property name="lastbuilddate" value="01/01/1970 12:00 AM" /> 
< property file="$.\lastbuild.properties" override="true"/> 

包括在你的文件集定義日期任務。指定只選擇那些有最後修改日期的文件在您上次構建日期

<文件集ID = 「TheFiles」> <日期的日期時間= 「$ {lastbuilddate}」 時= 「後」/> < /文件集>

運行你的FTP的文件集TheFiles

更新lastbuild.properties與最新的運行日期的文件。注意到我們使用最初定義的日期/時間屬性。

< echo msg="lastbuilddate=${builddate} ${buildtime}" file="$./lastbuild.properties" append="false" /> 

你運行你的目標時,它都會將自lastbuilddate屬性指定的日期已更改只有FTP文件

0

我寫下一個Perl腳本,使用SVN倉庫 做它(http://svnftpdeploy.sourceforge.net/ ......我不知道我在寫英文)

它需要一個本地目錄從svn獲取文件,另一個從ftp獲取文件(在下一個svn版本中更改),本地文件存儲最後上傳的svn版本,本地目錄存儲從ftp更改的文件列表。並且它交互式地要求在發生衝突時採取行動(某人獨立於您的部署腳本而更改了服務器中的文件)。

現在我切換到phing和git,難的部分是管理交互性,我想我會用-D =來管理目標部署(使用-Dconflictaction = stop,viewdiff,viewdiffanddeploy,ignore或such一個東西)。

0

您可以使用​​或dandelion上傳只是通過ftp的變化。我猜這是不是很難用其中一個與phing ...

0

您是否嘗試過使用FtpDeployTaskdepends="true"屬性?

如果depends設置爲true,則該任務將僅更新具有比服務器上相應的時間戳更新的本地修改時間戳的文件。

不幸的是,這似乎不適用於我:所有文件正在傳輸。