2011-10-11 20 views
5

Używam Phing i teraz używam tego kodu, aby przesłać swoje pliki na serwer FTP:Phing - Wdrażanie z FTP ale tylko nadpisać gdy wielkość zmieniła

<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> 

To zajmuje dużo czasu, aby załadować i Mam wiele zdjęć - więc za każdym razem, gdy wprowadzam małą zmianę tekstu, nie chcę, aby ponownie przesyłała wszystko. Czy istnieje sposób, aby wykryć, które pliki zostały zmienione i tylko przesłać je?

Dzięki!

Odpowiedz

8

To trochę za późno ... ale MOŻESZ to zrobić z Phingiem. Wymaga to wykonania kilku kroków:

Zdefiniuj właściwość daty, z której można przejść. Będzie to konieczne, na końcu, kiedy jesteś zapisywania daty ostatniej kompilacji dla przyszłości buduje

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

Definiowanie właściwości lastbuilddate. Zdefiniuj to w jakiś sposób. Następnie dołącz plik (zostanie utworzony na końcu twojego uruchomienia) z tą samą usługą. Jeśli plik istnieje (2 bieg i po), zastępuje ustawienie, które określono w cokolwiek ostatnia data była

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

Dołącz data zadanie w definicji zestawu plików. Który określa tylko wybrać pliki, które mają daty ostatniej modyfikacji po ostatniej dacie kompilacji

< fileset id = "TheFiles"> < data datetime = "$ {lastbuilddate}" gdy = "po" /> </fileset>

Uruchom ftp dla TheFiles fileset

aktualizować plik lastbuild.properties z najnowszą datą uruchomienia. Zauważyliśmy, że używamy początkowo właściwości daty/czasu.

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

każdym uruchomieniu swój cel, to będzie tylko pliki ftp, które zostały zmienione od daty określonej w nieruchomości lastbuilddate

0

spisałem skrypt Perla, który robi to z repozytorium svn (http://svnftpdeploy.sourceforge.net/ ... Nie wiem, co napisałem po angielsku)

Wymaga lokalny katalog do pobrania plików z svn, inny do pobrania plików z ftp (zmieniony w następnym wydaniu svn), lokalny plik do ostatniego przesłanego magazynu svn release, lokalny katalog do przechowywania zmienionej listy plików z ftp. I interaktywnie prosi o akcję w przypadku konfliktu (ktoś zmienił plik na serwerze niezależnie od skryptu wdrażania).

Teraz przełączam się na phing i git, ciężko byłoby zarządzać interaktywnością, myślę, że poradziłbym sobie z -D = dla docelowego wdrożenia (z -Dconflictaction = stop, viewdiff, viewdiffanddeploy, ignore lub takim rzecz).

0

Można użyć git-ftp lub dandelion przesłać tylko zmiany przez FTP . Domyślam się, że nie jest tak trudno używać jednego z nich przy phing ...

0

Czy próbowałeś użyć atrybutu depends="true" z FtpDeployTask?

Jeśli zależy jest ustawiony na true, zadanie będzie aktualizować tylko pliki z modyfikacją lokalnego datownik, który jest nowszy niż w analogicznym datownik na serwerze.

Niestety, nie działa to dla mnie: wszystkie pliki są przesyłane.