MAIN MENU
Devolutions Blog

Ankündigungen, Aktualisierungen und Einsichten von Devolutions

Devolutions PowerShell Universal Git Sync illustration for the blog.

Erfolgreich mit PowerShell Universal Git Sync: Funktionen, Modi und Konfigurationsoptionen

Dieser Beitrag führt durch die Git-Sync-Modi von PowerShell Universal, Remote-Optionen, Anmeldedaten, erstes Push und Pull, Sync-Intervall, bidirektional, unidirektional und Push-only sowie häufige Merge-, Auth-, SSL- und Hängprobleme.

Git-Synchronisierung (Git Sync) ist eine Funktion von PowerShell Universal. Sie erstellt Commits auf Basis von Änderungen im PowerShell Universal-Konfigurationsrepository und pusht und pullt sie von einem Git-Remote. Git Sync sorgt für Konfigurationskonsistenz in einem hochverfügbaren PowerShell Universal-Cluster oder kann Änderungen über Pull Requests und Branches von einer Dev-Umgebung in die Produktion bringen. Auch in einer Einzelknoten-Umgebung ist sie nützlich, um eine Änderungshistorie zu behalten.

Wie funktioniert Git Sync?

Git Sync funktioniert, indem in einem regelmäßigen Intervall git pull- und git push-Befehle ausgeführt werden, damit die Konfigurationsdateien mit dem Remote-Git-Repository übereinstimmen. Standardmäßig läuft der Git-Sync-Prozess jede Minute, um Änderungen vom Git-Remote zu pullen. Bei der Benutzerinteraktion arbeitet Git Sync in zwei Modi.

Manueller Modus

Der Standardmodus ist der manuelle Modus. In diesem Modus ist der PowerShell Universal-Server praktisch schreibgeschützt, bis ein Benutzer in der Admin-Konsole auf die Schaltfläche Edit klickt. Der Benutzer kann dann Änderungen in der gesamten Admin-Konsole vornehmen. Sind die Änderungen fertig, kann der Benutzer eine Commit-Nachricht angeben und die Änderungen zum Remote pushen; der Server wird danach wieder schreibgeschützt. Während der Benutzer die Konfigurationsdateien bearbeitet, pullt der Git-Sync-Prozess nicht vom Remote.

Beachten Sie, dass der manuelle Modus den Zustand des gesamten Servers ändert. Wenn mehrere Administratoren zu diesem Zeitpunkt Änderungen am Server vornehmen, sollten sie wissen, dass ihre Änderungen nicht auf ihr Konto isoliert sind.

Automatischer Modus

Der zweite Modus ist der automatische Modus. In diesem Modus ist der PowerShell Universal-Server beschreibbar, und alle Änderungen werden committet und direkt zum Git-Remote gepusht. In diesem Modus kann der Benutzer keine Commit-Nachricht angeben, muss sich aber nicht um das Ein- und Ausschalten des Bearbeitungsmodus kümmern.

Git-Sync-Optionen

Unabhängig davon, wie der Benutzer mit Git interagiert, kann der Git-Sync-Prozess auf drei Arten mit einem Git-Remote arbeiten.

Use Database

Die Einstellung Use Database speichert das Git-Repository direkt in der PSU-Datenbank. Das kann Git Sync vereinfachen, weil Sie kein Git-Remote wie GitHub oder Bitbucket einrichten und sich nicht um Netzwerk und Anmeldedaten kümmern müssen. Use Database setzt voraus, dass das Befehlszeilentool git.exe oder eine plattformspezifische Git-Version auf dem PowerShell Universal-System installiert ist. Die Einstellung nutzt git bundle, um Bundles zu erstellen und direkt in der Datenbank zu speichern. Der Nachteil dieser Konfiguration ist, dass das Git-Repository für Drittanbietertools nicht leicht zugänglich ist.

Mehr zu git bundle.

Interner Git-Client

PowerShell Universal enthält einen internen Git-Client, der von Remote-Repositories pushen und pullen kann. Dieser Client, LibGit2Sharp, kapselt eine C-basierte Git-Client-Bibliothek. Er bietet nicht den vollen Funktionsumfang von git.exe, erfordert aber keine Git-Client-Installation auf dem PSU-Server. Sie können Anmeldedaten in den Git-Einstellungen von PowerShell Universal hinterlegen, die mit der Git-Client-Bibliothek verwendet werden.

Weil die interne Git-Client-Bibliothek spezifische Implementierungen im PSU-Server braucht, ist sie gegenüber dem externen Git-Client funktionsärmer. Für die meisten Benutzer sollte sie dennoch ausreichen. Einige Einschränkungen sind:

  • Keine SSH-Unterstützung
  • Keine Integration mit Git-Credential-Helpers
  • Eingeschränkte Nutzung von git config

Um den internen Git-Client zu konfigurieren, deaktivieren Sie die Einstellung Use Database und tragen Sie Ihre Git-Remote-URL und Anmeldedaten ein.

Externer Git-Client

PowerShell Universal integriert auch den externen Git-Client als Befehlszeilenprozess. Git-Befehle wie git push, git pull und git commit werden direkt über einen externen git.exe-Prozess aufgerufen. Bei der Integration des externen Git-Clients übergibt PowerShell Universal keine Anmeldedaten an die Git-Befehle, Sie müssen sie also anders angeben.

Sie können Anmeldedaten auf folgende Weise angeben.

URL

Sie können einen Benutzernamen und ein Passwort (oder ein Personal Access Token) direkt in der URL mit der folgenden Syntax verwenden. Dieses Format braucht keine zusätzliche Git-Konfiguration, speichert die URL aber im Klartext in der Datenbank.

https://adam:PAT@github.com/ironmansoftware/shiny-octowaffle.git

Git-Credential-Helper

Sie können auch einen Git-Credential-Helper nutzen, um Anmeldedaten für bestimmte Repositories in Git zu speichern. PowerShell Universal integriert Credential-Helper nicht direkt, aber Sie können sie außerhalb der PSU-Umgebung konfigurieren. Wenn der Git-Sync-Prozess läuft, verwendet git.exe selbst die Anmeldedaten.

Mehr zu Git-Anmeldedaten. Beachten Sie, dass benutzerspezifische Git-Konfigurationseinstellungen im Profil des PSU-Dienstkontos gesetzt werden müssen.

Privater SSH-Schlüssel

Ähnlich wie beim Git-Credential-Helper können Sie auch einen privaten Git-SSH-Schlüssel für den PSU-Git-Client hinterlegen. Die meisten Git-Repositories erlauben das Hochladen eigener öffentlicher Schlüssel für den Zugriff, statt Anmeldedaten zu verwenden.

Als Beispiel können Sie der SSH-Konfigurationsdokumentation für GitHub folgen.

Weitere Einstellungen

Zusätzlich zu den Anmeldedaten lädt der PowerShell Universal-Git-Sync-Prozess alle Änderungen an benutzerlokalen oder globalen Git-Einstellungen. Dazu können Optionen wie SSL-Krypto-Backend, Zeilenenden und Leerzeichen gehören.

Git Sync einrichten

Git Sync wird eingerichtet, indem Sie die Git-Einstellungen entweder in der Datei appsettings.json oder über den Dialog Git Settings unter Settings > Git konfigurieren. Beim Einrichten von Git Sync müssen Sie mehrere Konfigurationsoptionen kennen. Wir empfehlen nach Möglichkeit die Datenbank. So lassen sich mehrere Knoten leichter mit denselben Git-Einstellungen konfigurieren, wenn sie eine Datenbank teilen.

Angaben zu Anmeldedaten

Die meisten Git-Repositories nutzen irgendeine Form von Personal Access Token. Personal Access Tokens können wie Passwörter verwendet und behandelt werden, lassen sich aber auch im Umfang einschränken und bei Bedarf auf dem Server widerrufen. Das ist unsere bevorzugte Methode für Anmeldedaten.

Es ist auch möglich, Benutzername und Passwort direkt zu verwenden.

Erste Synchronisierung

Zuerst müssen Sie den ersten Push oder Pull von einem Git-Remote kennen. Beachten Sie: Obwohl es ein init-Verhalten gibt, ist diese Einstellung nicht mehr erforderlich und kann ignoriert werden. Sie wird in einer zukünftigen Version entfernt.

Dateien lokal

Wenn Sie Git Sync noch nicht konfiguriert haben, ist das das häufigste Szenario. Sie haben lokale Konfigurationsdateien, die Sie in einem Git-Remote speichern möchten. Das Git-Remote muss bare sein. Es dürfen keine Branches angelegt sein, das Repository muss aber existieren. In diesem Szenario initialisiert PowerShell Universal ein lokales Git-Repository, erstellt den angegebenen Branch und initialisiert das Remote per git push.

Nach der ersten Sync liegen die lokalen Dateien im Remote.

Dateien im Remote

Wenn Ihr Git-Remote bereits einen Branch mit Dateien hat, müssen Sie sicherstellen, dass das PowerShell Universal-Konfigurationsrepository auf dem lokalen Server leer ist. Existieren Dateien, schlägt die erste Git Sync fehl. Existiert das Verzeichnis nicht, wird ein git clone auf dem angegebenen Branch ausgeführt und die Dateien werden lokal gepullt. PowerShell Universal konfiguriert sich anschließend anhand der gepullten Dateien neu.

Git-Sync-Intervall

Standardmäßig läuft der Git-Sync-Prozess jede Minute, um Änderungen zu prüfen, die zum Git-Remote gepusht wurden. Es wird ein git pull ausgeführt, dann wird der aktuelle HEAD-Commit des Branches mit dem SHA des letzten Git-Sync-Commits verglichen. Unterscheidet sich der HEAD-Commit-SHA vom vorherigen Commit-SHA, lädt das PowerShell Universal-Konfigurationssystem geänderte Dateien neu.

Sync-Verhalten

In PowerShell Universal gibt es drei Sync-Verhaltensweisen. Sie ändern, wie PowerShell Universal mit dem Remote-Git-Repository interagiert.

Bidirektional

Im bidirektionalen Modus werden bei jeder Git Sync ein git pull und ein git push ausgeführt. Die PowerShell Universal-Instanz ist lesend und schreibend.

Unidirektional

Im unidirektionalen Modus wird bei jeder Git Sync ein git pull ausgeführt. Die PowerShell Universal-Instanz ist schreibgeschützt. Das ist nützlich für Produktionsumgebungen, in denen Änderungen über Pull Requests kommen und nicht direkt auf dem PowerShell Universal-Server gemacht werden.

Nur Push

Im Nur-Push-Modus wird bei jeder Git Sync ein git push ausgeführt, wenn Änderungen vorhanden sind. Die PowerShell Universal-Instanz ist lesend und schreibend, pullt aber keine Änderungen vom Remote. Das ist nützlich, wenn Sie Dateien in einer Debug-Umgebung bearbeiten und keine Merge-Konflikte durch Änderungen vom Remote haben möchten.

Häufige Probleme

Nachfolgend einige häufige Probleme, die bei Git Sync auftreten können.

Merge-Konflikte

PowerShell Universal behandelt Merge-Konflikte nicht; sie erfordern manuelles Eingreifen. Deshalb kann es sinnvoll sein, Produktionsumgebungen im unidirektionalen Git-Sync-Modus zu betreiben, um lokale Änderungen zu vermeiden. Alle Änderungen und Merges erfolgen mit den Git-Tools im Repository oder in anderen lokalen Entwicklungsumgebungen.

Wenn Sie eine lesend/schreibende Produktionsumgebung mit mehreren Knoten wünschen, empfiehlt es sich, mehrere unidirektionale Knoten und einen einzelnen bidirektionalen Knoten einzurichten.

Stoßen Sie auf einen Merge-Konflikt, müssen Sie die Dateien direkt auf dem PSU-Server bearbeiten, um ihn zu beheben.

Authentifizierungsprobleme

Jeder Git-Remote-Server ist etwas anders. Bitbucket hat zum Beispiel mehrere Stufen von HTTP-Tokens, und Sie müssen sicherstellen, dass sie für Ihre Repositories richtig konfiguriert sind. Wir empfehlen, zuerst mit einem Standard-Git-Client zu klonen, bevor Sie ein Token in PowerShell Universal verwenden. Wenn Sie Anmeldedaten in PowerShell Universal testen möchten, können Sie die Schaltfläche Synchronize Now auf der Git-Seite nutzen, um den Zugriff zu prüfen, ohne auf die geplante Git Sync zu warten.

SSL-Probleme

Der interne Git-Client akzeptiert keine nicht vertrauenswürdigen Zertifikate. Hat Ihr Server Probleme mit SSL-Verbindungen, müssen Sie möglicherweise einen externen Git-Client konfigurieren und die passenden git-config-Einstellungen setzen, um Fehler zu vermeiden und eventuelle Unsicherheiten dieser Änderungen in Kauf zu nehmen.

Git hängt

Standardmäßig wartet der PowerShell Universal-Git-Sync-Prozess 60 Sekunden, bis der git.exe-Prozess beendet ist. Auf manchen Systemen kann Git eine Benutzeroberfläche für Anmeldedaten öffnen. Das kann dazu führen, dass Git Sync hängt und fehlschlägt.

Bereit zum Bauen? PowerShell Universal herunterladen.