Lassen Sie uns die Szene aufbauen. Sagen wir, Sie sind ein Web-Freelancer und fast fertig mit der neuen Website eines Kunden. Über die Jahre haben Sie gelernt, dass es am besten ist, die Dateien nicht mehr direkt über FTP zu bearbeiten. Es ist zu einfach, Änderungen vorzunehmen, die alles kaputt machen, ohne Aufzeichnungen darüber, was sich geändert hat und wer was getan hat. Heutzutage verwenden Sie Git, um die Version der Dateien zu verwalten.
Warum Versionskontrolle verwenden?
Es gibt viele Vorteile bei der Verwendung eines Versionskontrollsystems für Ihre Projekte. Selbst wenn Sie eine sehr organisierte Person sind, können Sie mit einem Benennungssystem wie `index-2017-01-12.html` oder `header_image_final_final_v2.svg` leicht durcheinandergeraten. Ist es wirklich final? Woher wissen Sie, was genau sich zwischen diesen Versionen und der letzten geändert hat?
Ein Versionskontrollsystem (VCS, wie Git) erzwingt, dass zu jedem Zeitpunkt nur eine Version Ihrer Dateien vorhanden ist. Alle vergangenen Versionen von Dateien sind ordentlich im VCS verpackt. Wenn Sie sie benötigen, können Sie jederzeit jede Version abrufen, und Sie haben einen Schnappschuss des vollständigen Projekts zur Hand.
Jedes Mal, wenn Sie eine neue Version Ihres Projekts speichern, fordert Ihr VCS Sie auf, eine kurze Beschreibung der Änderungen anzugeben. Zusätzlich (bei Code-/Textdateien) können Sie genau sehen, was sich im Inhalt der Datei geändert hat. Das VCS hilft Ihnen zu verstehen, wie sich Ihr Projekt zwischen den Versionen entwickelt hat.
Deployment / Hochladen
So nützlich ein VCS auch ist, es hilft nicht direkt beim Hochladen von Dateien auf eine Live-Website. (Wir werden dies als Deployment bezeichnen.)
Das Bereitstellen von Dateien kann sehr einfach sein. Verwenden Sie einen FTP-Client (z. B. Transmit), um Dateien per FTP oder SFTP direkt auf Ihren Server hochzuladen. Die erstmalige Veröffentlichung einer Website ist besonders einfach: Laden Sie einfach alle Dateien hoch.
Wenn Sie Änderungen an einer Website vornehmen, müssen Sie auch Dateien hochladen. Aber... welche? Erinnern Sie sich immer, welche Dateien Sie geändert haben? Wenn Ihr panischer Kunde anruft, um Ihnen mitzuteilen, dass die Website nicht funktioniert, wissen Sie dann, was sich bei den letzten Uploads geändert hat?
Wenn Sie Git verwenden, ist es einfach zu sehen. Aber trotzdem erledigt Git kein Deployment, und das manuelle Überprüfen, welche Dateien sich geändert haben, und das Verschieben dieser ist fehleranfällig und mühsam. Sie benötigen immer noch eine clevere Möglichkeit, Ihre geänderten Dateien hochzuladen und bereitzustellen.
Welche anderen Optionen haben Sie also für das Bereitstellen von Dateien? Eine Option ist auch die Installation von Git auf dem Server. Dann können Sie, genau wie Sie lokal von Ihrem Git-Repository pushen und pullen, von diesem Repository auf dem Server pullen und der Server lädt die neuesten Änderungen herunter. Dies ist jedoch nicht für jeden eine Option. Es erfordert Shell-Zugriff auf den Server, und das ist auf vielen Shared-Hosting-Lösungen einfach nicht möglich.
Eine weitere Möglichkeit ist, sich auf Drittanbieter-Cloud-Dienste wie DeployBot, Springloops oder Beanstalk zu verlassen. Keine dieser Optionen ist schlecht, aber es gibt potenzielle Nachteile
- Es fallen monatliche oder jährliche Kosten für diese Dienste an, unabhängig davon, ob Sie sie gerade aktiv nutzen oder nicht.
- Die Einrichtung externer Git-Repositorys kann einige Zeit in Anspruch nehmen und kompliziert sein.
- Es besteht auch ein erhöhtes Risiko, sich auf einen Drittanbieter-Dienst zu verlassen. Der Deployment-Dienst kann gerade dann ausfallen, wenn Sie bereitstellen möchten.
- Die Geschwindigkeit des Deployments hängt von diesem Dienst ab. Möglicherweise gibt es eine lange Warteschlange anderer Deployments vor Ihrem.
Ein Blick auf GitFTP-Deploy
Werfen wir einen Blick auf meine Alternative: GitFTP-Deploy. GitFTP-Deploy ist eine native macOS-App, die nur die geänderten Dateien (über SFTP, FTP oder FTPS) seit dem letzten Deployment hochlädt. Sie müssen sich nicht merken, welche Dateien Sie geändert, hinzugefügt oder gelöscht haben.
Da GitFTP-Deploy aus Ihrem lokalen Git-Repository liest, was sich geändert hat, gewöhnen Sie sich auch an die Verwendung von Git für Ihr Projekt: Sobald eine Datei committet ist, ist sie auch für das Deployment bereit.
Eine weitere Funktion, die Ihr Deployment erleichtern könnte, ist die Möglichkeit von GitFTP-Deploy, Pre- und Post-Deployment-Skripte auszuführen. Verwenden Sie einen JavaScript-Compiler (wie Babel) oder einen CSS-Präprozessor (wie Stylus)? Verketten und komprimieren Sie Assets? Das Ausführen dieser Aufgaben kann durch die App automatisiert werden.
Manchmal kann es eine echte Zeitersparnis sein, einfach die letzten Änderungen zu committen, und sie werden automatisch auf den Server gepusht, nur mit einem einzigen Git-Commit-Befehl.
Erste Schritte
In weniger als zwei Minuten können Sie mit dem Deployment Ihrer Dateien beginnen.
1) Neue Website erstellen

2) Auf Ihr lokales Repository zeigen und den Commit auswählen, ab dem Sie mit dem Deployment beginnen möchten

3) Serververbindung einrichten

4) Auf "Deploy" klicken

Vielleicht ist Ihr Workflow etwas komplizierter? Brauchen Sie mehr Leistung?
Sie können Skripte angeben, die sowohl lokal als auch auf Ihrem Server vor und nach dem Hochladen ausgeführt werden. Beispielsweise möchten Sie vor dem Hochladen Ihren bevorzugten JavaScript-Compiler oder ein Gulp-Skript ausführen, das Ihre JavaScript-Dateien für die Produktion verkettet und optimiert.
Oder verwenden Sie vielleicht einen Workflow mit einem anderen Task-Runner wie Grunt? Grunt kann auch konfiguriert werden, um Ihnen bei der Optimierung von Bildern, der Komprimierung von Skripten, der Kompilierung von Präprozessoren und unzähligen anderen Dingen zu helfen.

gulp --productionDie Möglichkeit, Tasks auszuführen, kann sehr leistungsfähig sein. Selbst WordPress verfügt beispielsweise über WP-CLI, was bedeutet, dass Sie Dinge wie das Synchronisieren von Datenbanken und das Aktualisieren von Einstellungen mit Ihrem Deployment skripten könnten.
Weitere Hinweise zur Nutzung
Wenn Sie keine Build-Dateien unter Versionskontrolle haben möchten, können Sie diesen Ordner zu "immer hochladen" hinzufügen.

Die Verwendung von GitFTP-Deploy bedeutet nicht, dass Sie GitHub oder einen anderen gehosteten Git-Repository-Dienst von Drittanbietern nicht mehr verwenden können. Stellen Sie einfach sicher, dass Sie die Änderungen von dort herunterladen, bevor Sie bereitstellen.

Team-Nutzung
Obwohl GitFTP-Deploy nicht unbedingt für Teams entwickelt wurde, können Sie es trotzdem verwenden. Der einfachste Weg ist, dass eine Person die Deployments übernimmt. Eine weitere, fortschrittlichere Option ist die Ausführung von GitFTP-Deploy auf einem Server.
Dieser Weg funktioniert möglicherweise nicht für große Teams, und Commits werden von vielen verschiedenen Personen durchgeführt. GitFTP-Deploy versucht jedoch zu prüfen, welcher Branch und welcher Commit zuletzt bereitgestellt wurde.
Das sieht ziemlich cool aus und ist besser als Cloud-Lösungen (ich stimme allen Ihren Nachteilen offensichtlich zu)
Wird das nur für Mac sein oder gibt es Pläne für eine PC-Version?
Vielen Dank
Hallo Nour! Danke für deinen Kommentar! Leider gibt es keine Pläne für eine Windows-Version.
Ich war kurz davor, das zu kaufen, aber dann habe ich gesehen, dass es keine Submodule unterstützt, was für unsere Projekte entscheidend ist. Wir verwenden derzeit DeployHQ, was gut ist, weil es zentralisiert ist, aber ich liebe die Fähigkeit von GitFTP-Deploy, ein kompiliertes Asset-Verzeichnis hochzuladen, damit es aus der Quellcodeverwaltung herausgehalten werden kann.
Hallo Dalton! Tut mir leid, das zu hören. Ich habe die Implementierung von Submodulen untersucht, aber ich hatte kaum Anfragen von meinen Nutzern. Wenn ich mehr Anfragen erhalte, werde ich mich auf jeden Fall darum kümmern.
Das sieht nach einer sehr nützlichen Anwendung aus und der Preis ist auch recht zugänglich. Es gibt viele Apps mit monatlichen Abonnements, die mehr kosten.
Gibt es eine Windows-Version für diejenigen unter uns, die keine Macs benutzen? Gibt es Pläne, so etwas zu entwickeln? Oder können Sie Alternativen nennen, die einen ähnlichen Service anbieten?
Hallo Adrian! Tut mir leid, es gibt keine Pläne für eine Windows-Version. / Jan
Vielleicht habe ich es übersehen, aber können Sie Quellcodeverzeichnisse von den Uploads ausschließen? Ich sehe, dass Sie Build-Dateien angeben können, aber ich habe nicht gesehen, wie man Quellcodedateien beim Hochladen des Repos ignoriert.
Hallo Gurnzbot! Dateien, die in Ihrer .gitignore angegeben sind, werden nicht hochgeladen, es sei denn, Sie fügen sie hinzu. Meinen Sie, dass Sie den Upload bestimmter Dateien deaktivieren möchten, die in das Repository committet wurden?
Ja, letzteres.
Wenn ich einen 'src'-Pfad habe, der alle meine Quellcodedateien (unminifizierte JS, Sass usw.) enthält, und einen 'dist'-Pfad, der alle komprimierten und gebauten Dateien enthält, gibt es eine Möglichkeit, GitFTP-Deploy anzuweisen, das src-Verzeichnis nicht hochzuladen?
Ich möchte das in meinem Repo haben, da es meinen gesamten Quellcode enthält.
Auf der anderen Seite würde ich wahrscheinlich das 'build'-Verzeichnis in meiner .gitignore-Datei haben. Ich würde es aber gerne auf den Server hochladen lassen, da es die Dateien enthält, die meine Anwendung verwenden wird.
Vielleicht verstehe ich die Funktionsweise falsch! :)
Prüfen Sie auf Updates. Ich habe gerade 2.1.0 veröffentlicht, mit der Sie Dateien ignorieren können. :-)
Toller Artikel, es ist auch erwähnenswert, dass Sie etwas Ähnliches über BitBucket mit ihrer relativ neuen "Pipelines"-Funktion einrichten können, alles innerhalb des KOSTENLOSEN Plans!
Ich habe es bei einem persönlichen Projekt eingerichtet, aber noch nicht alle kostenpflichtigen Einschränkungen vollständig geprüft, bisher aber nichts bemerkt!
Hallo Laurence! Danke für deinen Kommentar! Du hast Recht, das kann man auch mit anderen Diensten machen.
Ich glaube nicht, dass BitBucket Pipeline die gleiche Zielgruppe hat wie GitFTP-Deploy. Ich sehe BitBucket Pipeline eher als Continuous-Integration-Plattform und Pipelines kann zum Beispiel kein einfaches FTP. Außerdem ist die Einrichtung von Pipelines komplexer, und man muss YAML mögen. Man muss auch sein Repository auf BitBucket speichern (aus offensichtlichen Gründen).
Sie verlassen sich auf einen externen Server zum Pushen. Und es gibt Ratenbegrenzungen für das Pushen (aber diese werden für kleinere Projekte unwahrscheinlich erreicht).
(BitBucket hat auch angedeutet, dass Pipelines in Zukunft eine kostenpflichtige Funktion sein werden, auch wenn sie jetzt kostenlos ist).
Mit freundlichen Grüßen,
/ Jan
Wäre "automatisches Deployment beim *Push*" zukünftig als Option möglich?
Ich glaube nicht, dass ich bei jedem Commit deployen möchte.
Tatsächlich ist das keine schlechte Idee...
+1 dafür
Es gibt jetzt eine Beta-Version mit dieser Funktion. Lassen Sie mich wissen, wenn Sie sie ausprobieren möchten (https://eastwest.se/support). Sie wird hoffentlich in der nächsten Woche veröffentlicht.