Czy istnieje klient FTP lub podobny do FTP, który umożliwia „przesyłanie delta” - tj. Przesyłanie tylko tych części pliku, które zostały zmienione?

9

Często wprowadzam niewielkie zmiany w dość dużych plikach tekstowych przez FTP ( pliki CSS do tworzenia stron internetowych ), a ponieważ moje połączenie internetowe jest strasznie wolne, jest to bardzo bolesny proces.

Nawet jeśli zmienię tylko jeden znak pliku, nadal muszę siedzieć i czekać przez dłuższy czas, aż cały plik zostanie ponownie przesłany na serwer.

Czy jest jakiś sposób na edycję plików hostowanych zdalnie na moim komputerze lokalnym, a kiedy zapisuję plik, przesyłam tylko te części pliku, które uległy zmianie ?

Edycja: Myślę, że w tej chwili nie jestem pewien, jak korzystam z mojego klienta FTP. Zasadniczo otwieram zdalny plik przez SFTP za pomocą WinSCP. WinSCP zapisuje go w folderze tmp, uruchamia Sublime Text i zaczynam go edytować. Kiedy nacisnę Zapisz, WinSCP automatycznie prześle plik ponownie. Tak naprawdę nigdy nie zapisuję pliku na stałe na komputerze - wszystko odbywa się za pośrednictwem folderu tymczasowego WinSCP. Właśnie dlatego szukam rozwiązania, które można zastosować w ten sposób typu „hit and run”.


Poprzednia dyskusja

Wcześniej opublikowałem to pytanie w usłudze ServerFault, gdzie sugerowano użycie czegoś takiego jak git, jednak jak wyjaśniłem:

Za pomocą git lub podobnego narzędzia do kontroli wersji musiałbym dokonać zatwierdzenia za każdym razem, gdy zapisuję plik, prawda? Nawet jeśli można to zrobić automatycznie (tj. Gdybym miał makro, które utworzyło Ctrl-S w pliku zapisu Sublime Text i jednocześnie wykonałem wypychanie git), mógłbym dokonać 50–100 drobnych edycji pliku CSS na godzinę; na pewno skończyłbym ze spamowanym dziennikiem zatwierdzeń? Również rozwiązanie git jest nieelastyczne, ponieważ opiera się na dowolnym pliku, który edytuję, będącym częścią repozytorium git.

Jedynym rozwiązaniem, jakie do tej pory wymyśliłem, jest jakiś hackowany proces przy użyciu rsync, ale nawet wtedy jest to bardzo kłopotliwe:

  1. Pobieram potrzebne pliki na komputer (przez FTP / rsync / cokolwiek).
  2. Otwieram plik w (np.) Sublime Text i rozpoczynam edycję.
  3. Proces w tle monitoruje folder pod kątem modyfikacji plików. Gdy zapisuję plik, proces ten natychmiast uruchamia operację rsync z mojego komputera na serwer, przenosząc zmienione części pliku.

Musiałbym jednak ręcznie skonfigurować lub określić zdalne ścieżki do plików lub katalogów, w przeciwnym razie lokalny skrypt rsync nie będzie wiedział, gdzie należy zsynchronizować pliki, więc ta metoda jest nadal mało elastyczna. Ta metoda nie pozwoliłaby mi od razu wyszukać losowego pliku, otworzyć go i zapisać tak, jak robi to klient FTP.

Przy tej metodzie nie ma również widocznych informacji zwrotnych, takich jak pasek postępu przesyłania.

WackGet
źródło
7
Używanie git naprawdę jest właściwą odpowiedzią. To, czego szukasz tutaj, to obejście złej praktyki. Co jeśli zrobisz coś złego i zepsujesz? Git pozwala cofać.
TRiG,
1
Nie zgadzam się. Co jeśli po prostu chcesz zmienić pojedynczy wiersz dużego pliku tekstowego, który nie jest częścią repozytorium? Co jeśli Twoja organizacja nie zezwala na git? Mój przypadek użycia polega na tym, że wprowadzam setki drobnych zmian w plikach, które są zdalnie hostowane i które muszą być edytowane „na żywo” i „na miejscu”.
WackGet,
Nie mam teraz czasu na testowanie dużego pliku, więc opublikowanie go jako komentarza, a nie odpowiedzi, ale zajrzyj do Beyond Compare - jest to wieloplatformowy plik GUI, który można edytować za pomocą FTP / SFTP i możesz wybierz, które linie mają być synchronizowane. Prawdopodobnie nadal nie jest idealny, ale wykonalny. Mają też bezpłatny okres próbny.
Nick

Odpowiedzi:

7

Vim ma wbudowaną wtyczkę o nazwie netrw, która pozwala Vimowi edytować zdalne pliki. Rsync jest jednym z protokołów, których może używać:

:e rsync://user@hostname:port/path
:w rsync://user@hostname:port/path

Oczywiście, jeśli masz dostęp SSH do zdalnego komputera, a Vim jest na nim zainstalowany, prostsze może być użycie Vima zdalnie. Nano, Emacs i inne edytory z interfejsami wiersza poleceń są również opcjami w tym przypadku. W zależności od tego, jak złe jest twoje połączenie, może to nie być przyjemną opcją.


To wszystko powiedziało

wprowadzanie setek drobnych zmian w plikach, które są zdalnie hostowane i które muszą być edytowane „na żywo” i „na miejscu”

bez niezawodnego systemu wycofywania, takiego jak git może zapewnić, ty i twoja organizacja po prostu błagacie o udrękę, kiedy popełniacie nieuniknione błędy, które mogą bardzo pozostać niezauważone, dopóki nie zapomnicie dokładnie tego, co zrobiliście.

8bittree
źródło
SSH wydaje się oczywistą odpowiedzią, jeśli na serwerze jest uruchomiona dowolna wersja systemu Linux. Jeśli nie jest jeszcze uruchomiony na serwerze, naciskałbym na administratora serwera, aby to skonfigurować.
Charles Burge
Dziękuję wam obu; Mam pełny dostęp do SSH i mogę skonfigurować wszystko, co konieczne na serwerze. Nie mogę używać Vima zdalnie, ponieważ opóźnienia są często bardzo duże. Chciałbym również móc korzystać z edytorów pulpitu, takich jak Sublime. Wydaje mi się, że w tej chwili nie jestem pewien, jak korzystam z mojego klienta FTP - po prostu otwieram zdalny plik za pomocą WinSCP, zaczynam go edytować, a kiedy nacisnę Zapisz, WinSCP ponownie przesyła plik automatycznie. W rzeczywistości nie pobieram go do żadnego stałego katalogu na moim komputerze - wszystko odbywa się za pośrednictwem folderu tymczasowego WinSCP. Zmienię moje pytanie i wyjaśnię.
WackGet 12.10.16
@WackGet Vim działa również na pulpicie, nazywa się GVim. Cream to szczególna konfiguracja Vima, która powinna być względnie łatwa dla tych, którzy są bardziej przyzwyczajeni do edytorów takich jak Sublime, Notepad lub Textmate. To, co robisz z WinSCP, to w zasadzie sposób działania netrw. Pobiera się do tymczasowej lokalizacji, czeka na zapisanie, a następnie zapisuje go z powrotem na zdalnym serwerze, używając dowolnego określonego protokołu.
8bittree,
@ 8bittree Dzięki, to na pewno przyda się. Nie oznaczę tego jako odpowiedzi na moje oryginalne pytanie, ponieważ ogranicza cię to do używania wtyczki opartej na Vimie. Jeśli ktoś mógłby zaimplementować transfery delta podobne do netrw do klienta FTP lub FTP, byłoby to idealne rozwiązanie. Obecnie tego nie znalazłem, ale mam nadzieję, że istnieje.
WackGet 12.10.16
1

Beyond Compare to narzędzie do porównywania i łączenia folderów i plików; Obsługiwane są również serwery FTP i mogą być obsługiwane jak folder lokalny. Jest zastrzeżony, dożywotnia licencja na jedną instalację kosztuje 30 USD dla wersji standardowej (z FTP) lub 60 USD dla wersji profesjonalnej (z SFTP). Działa w systemach Windows, Mac OS i Linux. Osobiście rozwijam swoją witrynę na komputerze domowym i przesyłam zmiany na mój serwer WWW, kiedy jestem szczęśliwy. Wprowadzam zmiany ręcznie za pomocą Beyond Compare, ale można to również zautomatyzować. Możesz spróbować i sprawdzić, czy przesyła tylko pełne pliki lub fragmenty zmian; Nie jestem tego pewny.

Stéphane Tréboux
źródło
Poza tym porównanie jest niesamowite - idealne, jeśli nie masz dostępu do SSH, ale nadal musisz się upewnić, że pliki są zsynchronizowane na zdalnym serwerze (obsługiwany jest FTP przez SSL)
Sam Heuck