2010-03-29 7 views
5

Ich möchte meine scp-Bereitstellung optimieren, die derzeit alle Dateien kopiert, um nur Dateien zu kopieren, die seit dem letzten Build geändert wurden. Ich glaube es sollte irgendwie mit dem aktuellen Setup möglich sein, aber ich weiß nicht wie ich das machen soll.Get ANT scp nur neue/geänderte Dateien

Ich habe folgendes:

Projekt/src/bla/bla/< ---- Dateien Ich bin der Bearbeitung (meistens in diesem Fall PHP, einige statische Vermögenswerte)

Projekt/bauen < - ------ Ich habe einen lokalen Erstellungsschritt, den ich verwende, um die Dateien hier zu kopieren

Ich habe eine scp-Aufgabe, die jetzt alle von Project/Build auf einen Remote-Server kopiert, wenn ich es brauche.

Ist es möglich, irgendwie dieses zusätzliche "Build" -Verzeichnis zu nutzen, um das zu erreichen, was ich will - das heißt, ich möchte nur das "diff" zwischen src/** und build/** hochladen. Ist es möglich, dies als Dateisatz in ANT zu erhalten und dann scp das?

Ich weiß, dass was es bedeutet, dass, wenn ich irgendwie mit Dateien auf dem Server dazwischen löschen, das ANT Skript würde nicht bemerken, aber für mich ist das in Ordnung.

+0

Um zu verdeutlichen, ich möchte es im Grunde tun, was die normale Kopie Aufgabe mit inkrementellen Kopieren tut. – Artem

Antwort

13

Sie können ant scp sagen, nur Dateien zu kopieren, die seit dem letzten Stoß verändert wurden, wie so die modified-Tag:

<scp trust="true" sftp="true"... > 
    <fileset dir="${local.dir}"> 
    <modified> 
     <param name="cache.cachefile" value="localdev.cache"/> 
    </modified> 
    </fileset> 
</scp> 

Das erste Mal, wenn Sie diese verwenden, werden alle Dateien senden und die Zeitstempel-Cache in der Cachedatei deklariert in der param. Danach sendet es nur die modifizierten.

Geprüft und verifiziert im SFTP-Modus.

0

Ich denke, Sie müssen stattdessen rsync verwenden. Ich habe folgende article gefunden, die Ihre Frage beantwortet.

Kurz gesagt wird rsync dort weitermachen, wo es aufgehört hat und es sollte möglich sein, es über ssh zu tunneln.