WinSCP und die automatische Synchronisierung
Manche Hilfsmittel sind nicht nur höchst praktisch, sondern auch ganz einfach - wenn man sie denn einmal gefunden oder kennengelernt hat.
Ich arbeite in der Regel auf meinem Desktoprechner wie auf dem Laptop unter Windows; so bearbeite ich auch Webseiten, Webapplikationen oder Scripts, die dann allerdings unter Linux laufen müssen. Ich habe bisher den Aufwand einer kompletten Testumgebung unter Windows gescheut; sicherlich könnte ich, wenn ich wollte, Apache und PHP dort installieren, wahrscheinlich auch MySQL, aber spätestens bei Shell- oder Perl-Scripts wird’s dann schwierig, weil sich manche Operationen, die unter einem Unix durchaus elegant sind, unter Windows so nicht ohne weiteres umsetzen lassen.
Daher übertrage ich während der Arbeit regelmäßig die geänderten Dateien per SCP/SFTP auf einen lokalen oder externen Server und teste sie dort; dieser zusätzliche Arbeitsschritt ist kaum ein Problem. Jedenfalls nicht, so lange man an nur einer Datei arbeitet. Besteht ein Projekt aber, wie so oft, aus einer Vielzahl von untereinander abhängigen Dateien (dem Script, Modulen und Konfigurationsdateien, oder einem Template, Funktionen und CSS-Styles), die zudem jeweils in ihren eigenen Verzeichnissen liegen, ist es recht aufwendig, mal diese, mal jene Datei hochzuladen und vor allem dabei keine zu vergessen. Oft schon habe ich mich darüber geärgert, aber erst kürzlich festgestellt, dass ich mich gar nicht zu ärgern brauche.
Der von mir verwendete Client WinSCP bietet nämlich genau für meinen Workflow eine wunderbare Unterstützungsfunktion: er kann nicht nur Verzeichnisse vergleichen oder synchronisieren oder Verzeichniswechsel im lokalen Dateisystem auf dem externen Dateisystem des Servers parallel nachvollziehen - nein, WinSCP kann vor allem ein lokales Verzeichnis dauerhaft überwachen und jede neue oder geänderte Datei sofort hochladen und - auf Wunsch - auch jede lokal gelöschte Datei sofort auf dem Server löschen. Dabei können zudem bestimmte Dateien per vordefinierter Maske vom Abgleich ausgeschlossen werden - bspw. das Verzeichnis .git
oder alle Sicherungsdateien *.bak
.
Und schon ist ein lästiger Zwischenschritt eliminiert: jede lokal geänderte Datei kann sofort auf dem Server getestet werden. Wunderbar!
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
RoDiMa am :
Hallo, nachdem die Telekom unangekündigt auf verschlüsselten ftp-Transfer umgestellt hat funktioniert mein ftp-uploader nicht mehr. Provider muss noch nacharbeiten. diesen uploader habe viele benutzer die eine Wetterseite im Internet haben. hier konnte man genau festlegen wann ein upload erfolgen sollte. Bei mir jede 1/2 Stunde. probiere gerade winscp aus. sehe deinen text zur dauerhaften Überwachung. gibt es hier die Möglichkeit auch zeitlich den upload festzulegen? lg RoDiMa
Thomas Hochstein am :
Gänzlich unverschlüsselt wäre ja schon seit vielen Jahren ein kaum mehr vertretbares Risiko gewesen …
WinSCP scheint mir einen regelmäßigen Upload alle x Minuten/Stunden (wie man das bspw. für Webcam-Bilder kennt) nicht zu unterstützen.
Google zeigt mir aber Z-FTPcopyII, dass das (mit dem eingebauten Windows-Taskplaner zusammen) ermöglichen soll. Ganz klar wird aus der Beschreibung allerdings nicht, ob auch die Freeware-Version FTPS/SFTP kann (lt. Grafik ja, lt. Text nein), oder ob man dafür 22,- € investieren muss.
Alex S. am :
Hallo,
wenn du mit Quellcode arbeitest solltest du einfach auf Git wechseln, dein Workflow ist ein absoluter overkill für diesen Fall wenn es nur um Dateien geht. Genau dafür wurde Git entwickelt und ist kostenlos mit z.B. Gitlab oder Github, bei beiden ist mittlerweile auch mögliche private Repositories zu erstellen.
VG Alex
Thomas Hochstein am :
Git wurde entwickelt, um Code (oder Webseiten, oder …), den ich testen will, von meinem Desktoprechner auf einen anderen Rechner zu transportieren?
Ich hätte jetzt vermutet, dass man erst testet und dann den getesteten Code in Git committet, aber viele Wege führen nach Rom …
mitch am :
Du könntest git als effizientes Dateikopiersystem misbrauchen, aber das ist tatsächlich ein wenig von hinten durch die Brust ins Auge.
Wenn Du da basteln willst, kannst Du Dir was bauen, so dass Du mit zwei Branches hantierst und einen Entwicklungsstand hast, der auf einer temporären Testseite landet und auf Kommando zum Produktivstand wird. Mit der Möglichkeit, jederzeit wieder zurück zu gehen.
Ich hatte da mal was für den Webshop meiner Frau zuammengeklimpert: https://github.com/mmitch/gbdt Aber vermutlich auch Overkill.
Wenn Du auf Deinem Webserver git nutzen kannst, läuft dort höchstwahrscheinlich auch rsync, damit hast Du quasi den WinSCP-Sync in schneller und skriptbar. Bei heutigem Upload-Geschwindigkeiten ist das aber vermutlich alles egal. (Ich schiebe meine Webseite seit >20 Jahren mit rsync auf den Webserver, nachdem sie aus meinem Perlskript gefallen ist. Aktuell ist sowas wohl wieder hipp und heißt static site generator oder so).
Lots of rambling… Was wollte ich eigentlich schreiben?
Ach ja: Falls Du da wirklich git nehmen wolltetest, kämst Du auch ohne GitHub- und -lab-Account aus
Thomas Hochstein am :
Das habe ich im Prinzip (Staging- und Prod-Branch). Ichg pushe den einen, schaue mir das an und teste, wenn alles passt, merge ich und pushe in die Produktivumgebung.
Meistens tut das seinen Zweck. Ab und an braucht es aber Debugging oder "rapid prototyping"; da will ich nicht ständig Git als Dateikopiersystem zweckentfremden. Dann arbeite ich direkt mit vim auf dem Server, oder ich bearbeite die Dateien in meiner Arbeitsumgebung (Windows) und lade sie dann hoch. Wenn es mehr als eine Datei sein muss (Webseite/Script und Config, oder CSS, oder …), ist das aber aufwendig. Da ist es schon schön, wenn automatisch alles gesynced wird.
Meinen Webserver administriere ich selbst. Aber warum sollte ich mich mit rsync (zudem unter Windows) herumschlagen, was ich sonst nicht brauche, wenn ich mal einen Stapel Dateien quasi vom Desktop aus auf dem Server bearbeiten will?
Ich weiß. Ich habe seit > 10 Jahren zwei Git-Installationen, jeweils mit Gitweb als Weboberfläche; einmal öffentlich, einmal nur mit Password/Key zugänglich.
Irgendwann gehe ich mal den Schritt und installier Gitlab oder Gitea oder so etwas, aber dafür war bislang der Bedarf (und die Bastelzeit) noch nicht da.
mitch am :
Wenn Du direkt auf dem Server editierst, bist Du eh voll flexibel und in der Königsklasse unterwegs Da gibt’s gar nichts mehr zu ergänzen.
Checkst Du so eine Live-Änderung dann auf dem Server ins git ein oder syncst Du das zu Dir lokal zurück?
Thomas Hochstein am :
Auf dem Server habe ich meist kein Git-Repository liegen, synce Änderungen also zu mir lokal zurück (oder, wenn es wirklich nur Debugging war, kopiere den entsprechenden Abschnitt mit copy&paste, je nachdem, was einfacher ist).
Die meisten Webseiten werden beim Pushen ins externe Repo automatisch neu erzeugt (der Git-Server ruft ein Script auf dem Webserver auf, das dann einen Checkout mit
git archive
macht). Ich habe das vor viereinhalb Jahren mal hier im Blog beschrieben.Wenn es ausnahmsweise mal um Code geht, nutze ich idR WinSCP für den Upload.