2010-03-29 10 views
5

Chciałbym zoptymalizować moje wdrożenie scp, które obecnie kopiuje wszystkie pliki tylko do kopiowania plików, które uległy zmianie od czasu ostatniej kompilacji. Uważam, że powinno być możliwe przy obecnej konfiguracji, ale nie wiem jak to zrobić.Uzyskiwanie ANT do scp tylko nowych/zmienionych plików

mam następujące:

projektu/src/bla/bla/< ---- Pliki jestem edycji (głównie PHP w tym przypadku, niektóre statyczne aktywa)

projekt/zbudować < - ------ Mam lokalny krok kompilacji, którego używam do kopiowania plików tutaj

Mam teraz zadanie scp, które kopiuje cały projekt/kompilację na zdalny serwer, kiedy jest to potrzebne.

Czy można w jakiś sposób skorzystać z tego dodatkowego katalogu "kompilacji", aby osiągnąć to, co chcę - co oznacza, że ​​chcę tylko przesłać "różnicę" między src/** i build/**. Czy jest możliwe jakoś odzyskać to jako zestaw plików w ANT, a następnie scp to?

Rozumiem, że jeśli w jakiś sposób skasuję/pomieszam z plikami na serwerze, skrypt ANT tego nie zauważy, ale dla mnie jest to w porządku.

+0

Chcę wyjaśnić, że chcę zrobić to, co robi zwykłe zadanie kopiowania z przyrostowym kopiowaniem. – Artem

Odpowiedz

13

Można powiedzieć ant scp tylko kopiować pliki, które zostały zmodyfikowane od ostatniego przyciśnięcia pomocą znacznika modified tak:

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

Gdy po raz pierwszy skorzystać z tej, to wyśle ​​wszystkie pliki i cache timestampów w pliku pamięci podręcznej zadeklarowanym w param. Następnie wyśle ​​tylko zmodyfikowane.

Testowany i zweryfikowany w trybie sftp.

0

Myślę, że zamiast tego należy użyć rsync. Znalazłem następujący kod article, który odpowiada na twoje pytanie.

W skrócie, rsync zostanie wznowione tam, gdzie zostało przerwane i powinno być możliwe jego tunelowanie przez ssh.

Powiązane problemy