Gibt es einen FTP- oder FTP-ähnlichen Client, der "Delta-Uploads" ermöglicht - dh nur die Teile einer Datei hochlädt, die geändert wurden?

9

Ich nehme häufig kleine Änderungen an ziemlich großen Textdateien über FTP ( CSS-Dateien für die Webentwicklung ) vor. Da meine Internetverbindung sehr langsam ist, ist dies ein sehr schmerzhafter Prozess.

Selbst wenn ich nur ein Zeichen der Datei ändere, muss ich noch einige Zeit warten, bis die gesamte Datei erneut auf den Server hochgeladen wird.

Gibt es eine Möglichkeit, remote gehostete Dateien auf meinem lokalen Computer zu bearbeiten und beim Speichern der Datei nur die Teile der Datei hochzuladen, die sich geändert haben ?

Bearbeiten: Ich glaube, ich war mir im Moment nicht sicher, wie ich meinen FTP-Client verwende. Grundsätzlich öffne ich eine Remote-Datei über SFTP mit WinSCP. WinSCP speichert es in einem tmp-Ordner, startet Sublime Text und ich beginne mit der Bearbeitung. Wenn ich auf Speichern drücke, lädt WinSCP die Datei automatisch neu hoch. Ich speichere die Datei nie dauerhaft auf meinem Computer - alles wird über den temporären Ordner von WinSCP erledigt. Aus diesem Grund suche ich nach einer Lösung, die auf diese Art von "Hit and Run" verwendet werden kann.


Vorherige Diskussion

Ich habe diese Frage zuvor auf ServerFault gepostet, wo die Verwendung von etwas wie git vorgeschlagen wurde, jedoch wie ich erklärte:

Mit git oder einem ähnlichen Versionierungstool müsste ich jedes Mal ein Commit durchführen, wenn ich die Datei speichere, oder? Selbst wenn dies automatisch erfolgen könnte (dh wenn ich ein Makro hätte, mit dem Strg-S in Sublime Text gespeichert und gleichzeitig ein Git-Push ausgeführt wird), könnte ich 50 bis 100 winzige Änderungen an einer CSS-Datei pro Stunde vornehmen. Sicherlich würde ich mit einem Spam-Protokoll enden? Außerdem ist die Git-Lösung unflexibel, da sie davon abhängt, welche Datei ich gerade bearbeite, um Teil eines Git-Repos zu sein.

Die einzige Lösung, an die ich bisher denken kann, ist eine Art gehackter Prozess mit rsync, aber selbst dann ist es sehr umständlich:

  1. Ich lade die benötigten Dateien auf meinen Computer herunter (über FTP / rsync / was auch immer).
  2. Ich öffne eine Datei in (z. B.) Sublime Text und beginne Änderungen vorzunehmen.
  3. Ein Hintergrundprozess überwacht den Ordner auf Dateiänderungen. Wenn ich eine Datei speichere, löst dieser Prozess sofort einen rsync-Vorgang von meinem Computer auf den Server aus und überträgt die geänderten Teile der Datei.

Ich muss jedoch die Remote-Datei- oder Verzeichnispfade manuell einrichten oder angeben, da das lokale rsync-Skript sonst nicht weiß, wo die Dateien rsynciert werden sollen, sodass diese Methode immer noch ziemlich unflexibel ist. Mit dieser Methode kann ich nicht sofort zu einer zufälligen Datei navigieren, sie öffnen und speichern, wie es ein FTP-Client tut.

Bei dieser Methode gibt es auch kein sichtbares Feedback wie einen Upload-Fortschrittsbalken.

WackGet
quelle
7
Die Verwendung von Git ist wirklich die richtige Antwort. Was Sie hier suchen, ist eine Problemumgehung für schlechte Praxis. Was ist, wenn Sie etwas falsch machen und Dinge kaputt machen? Git gibt Ihnen Rollbacks.
TRiG
1
Ich stimme dir nicht zu. Was ist, wenn Sie einfach eine einzelne Zeile einer großen Textdatei ändern möchten, die nicht Teil eines Repos ist? Was ist, wenn Ihre Organisation Git nicht zulässt oder unterstützt? Mein Anwendungsfall ist, dass ich Hunderte winziger Änderungen an Dateien vornehme, die remote gehostet werden und die "live" und "an Ort und Stelle" bearbeitet werden müssen.
WackGet
Ich habe momentan keine Zeit, eine große Datei zu testen. Veröffentlichen Sie dies also als Kommentar, nicht als Antwort, sondern schauen Sie sich Beyond Compare an - es ist eine plattformübergreifende GUI-Diff-Datei, die über FTP / SFTP bearbeitet werden kann, und Sie können Wählen Sie aus, über welche Zeilen synchronisiert werden soll. Wahrscheinlich immer noch nicht ideal, aber praktikabel. Sie haben auch eine kostenlose Testversion.
Nick

Antworten:

7

Vim verfügt über ein integriertes Plugin namens netrw, mit dem Vim Remote-Dateien bearbeiten kann. Rsync ist eines der Protokolle, die es verwenden kann:

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

Wenn Sie SSH-Zugriff auf den Remotecomputer haben und Vim darauf installiert ist, ist es natürlich möglicherweise einfacher, Vim nur remote zu verwenden. Nano, Emacs und andere Editoren mit Befehlszeilenschnittstellen sind in diesem Fall ebenfalls Optionen. Je nachdem, wie schlecht Ihre Verbindung ist, ist dies möglicherweise keine angenehme Option.


Das alles sagte,

Hunderte kleiner Änderungen an Dateien vornehmen, die remote gehostet werden und "live" und "an Ort und Stelle" bearbeitet werden müssen.

Ohne ein zuverlässiges Rollback-System, wie es Git bieten kann, betteln Sie und Ihr Unternehmen nur um Qual, wenn Sie die unvermeidlichen Fehler machen, die möglicherweise unbemerkt bleiben, bis Sie genau vergessen haben, was Sie getan haben.

8bittree
quelle
SSH scheint die offensichtliche Antwort zu sein, wenn auf dem Server eine Linux-Version ausgeführt wird. Wenn es nicht bereits auf dem Server ausgeführt wird, drücke ich den Serveradministrator, um dies einzurichten.
Charles Burge
Danke euch beiden; Ich habe vollen SSH-Zugriff und kann alles konfigurieren, was auf dem Server erforderlich ist. Ich kann Vim nicht remote verwenden, da die Latenz oft sehr hoch ist. Außerdem möchte ich Desktop-Editoren wie Sublime verwenden können. Ich glaube, ich war mir im Moment nicht sicher, wie ich meinen FTP-Client verwende. Im Grunde öffne ich eine Remote-Datei mit WinSCP, beginne mit der Bearbeitung und wenn ich auf Speichern klicke, lädt WinSCP die Datei automatisch neu hoch. Ich lade es nicht in ein permanentes Verzeichnis auf meinem Computer herunter - alles wird über den temporären Ordner von WinSCP erledigt. Ich werde meine Frage bearbeiten und klären.
WackGet
@WackGet Vim funktioniert auch auf dem Desktop, es heißt GVim. Cream ist eine spezielle Konfiguration von Vim, die für Redakteure wie Sublime, Notepad oder Textmate relativ einfach sein soll. Was Sie mit WinSCP machen, ist im Wesentlichen, wie netrw funktioniert. Es wird an einen temporären Speicherort heruntergeladen, wartet auf das Speichern und schreibt es dann unter Verwendung des von Ihnen angegebenen Protokolls zurück auf den Remote-Server.
8bittree
@ 8bittree Danke, das wird sicherlich nützlich sein. Ich werde diese nicht als Antwort auf meine ursprüngliche Frage markieren, da Sie nur das Vim-basierte Plugin verwenden können. Wenn jemand netrw-ähnliche Delta-Übertragungen in einen FTP- oder FTP-ähnlichen Client implementieren könnte, wäre das perfekt. Derzeit habe ich das noch nicht gefunden, aber ich hoffe, dass es existiert.
WackGet
1

Beyond Compare ist ein Diff-Tool, mit dem Ordner und Dateien verglichen und zusammengeführt werden können. FTP-Server werden ebenfalls unterstützt und können wie ein lokaler Ordner behandelt werden. Es ist urheberrechtlich geschützt. Eine lebenslange Lizenz für eine Installation kostet 30 USD für die Standard Edition (mit FTP) oder 60 USD für die Professional Edition (mit SFTP). Es läuft unter Windows, Mac OS und Linux. Persönlich entwickle ich meine Website auf meinem Heimcomputer und lade die Änderungen auf meinen Webserver hoch, wenn ich zufrieden bin. Ich gehe die Änderungen mit Beyond Compare von Hand durch, aber dies kann auch automatisiert werden. Sie können es versuchen und feststellen, ob nur vollständige Dateien oder Änderungsblöcke hochgeladen werden. Ich bin mir darüber nicht sicher.

Stéphane Tréboux
quelle
Ein unvergleichlicher Vergleich ist fantastisch - perfekt, wenn Sie keinen SSH-Zugriff haben, aber dennoch sicherstellen müssen, dass Dateien auf einem Remote-Server synchronisiert werden (FTP über SSL wird unterstützt)
Sam Heuck