Der Inside-Out-Sicherheits Blog - Der Inside-Out-Sicherheits Blog

Mergen in Git: Tutorial zu Remote- und lokalen Git-Repositorys | Varonis

Geschrieben von Jeff Brown | May 12, 2021 4:00:00 AM

In meinem letzten Artikel „Zurücksetzen eines Commits in Git“ (einem PowerShell-Git-Tutorial) habe ich gezeigt, wie sich ein lokales PowerShell-Git-Repository nutzen und die Vorteile der lokalen Quellcodeverwaltung ausschöpfen lassen. Mit Git kann man Commits oder Snapshots seines Codes erstellen und zu früheren Versionen zurückkehren. Normalerweise erstellt man bei der Arbeit mit Git- und Code-Repositorys zuerst die Remote-Version und lädt sie dann auf sein lokales System herunter.

Wenn man jedoch ein Projekt zuerst auf seinem lokalen System starten und es anschließend mit einem Remote-Repository verbinden möchte, muss man die Repositories irgendwie mergen. In diesem Beitrag zeige ich, wie das Merging in Git funktioniert, d. h. wie man ein lokales Git-Repository nimmt und es in ein Remote-Repository in seinem GitHub-Konto mergt.

Um dieses PowerShell-Git-Tutorial zum mergen in Git durchzuarbeiten, benötigen Sie Folgendes:

1. Erstellen des lokalen GitRepository

Zunächst müssen Sie ein lokales Repository für Ihr Projekt erstellen. Ich werde PowerShell für dieses Tutorial verwenden, aber Sie können auch jedes andere Terminal verwenden, das Ihnen zur Verfügung steht. Sie müssen jedoch die entsprechenden Befehle zum Erstellen von Ordnern und zum Navigieren in der Verzeichnisstruktur verwenden, um zu verstehen, wie das Merging in Git funktioniert.

Fangen Sie an, indem Sie einen Ordner anlegen, in dem Sie Ihre Projektdateien speichern, und wechseln Sie anschließend in der Konsole in dieses Verzeichnis. Initialisieren Sie nun den Ordner als Git-Repository mit dem Befehl „git init“.

  1. New-Item my_project -ItemType Directory
  2. Set-Location .\my_project\
  3. git init

2. Erstellen des ersten Git-Commits

Sobald Sie das lokale Git-Repository erstellt haben, müssen Sie dem Projekt Dateien hinzufügen. Ich werde ein PowerShell-Skript erstellen, das „Hello World!“ auf der Konsole ausgibt, und dann die Ausgabe des Skripts überprüfen.

  1. New-Item -Name HelloWorld.ps1 -ItemType File
  2. Add-Content -Value ‘“Hello World!”’ -Path .\HelloWorld.ps1
  3. .\HelloWorld.ps1

Das Repository verfügt über eine nicht getrackte Datei, die zum Erstellen des ersten Commits verwendet werden soll. Sie können nicht getrackte Dateien mit dem Befehl „git status“ anzeigen. Sie können die Datei zum Staging-Bereich hinzufügen, indem Sie den Befehl „git add“ verwenden und den Dateinamen angeben. Erstellen Sie als Nächstes einen Commit mit dem Befehl „git commit“ und dem Switch –m, um dem Commit eine Nachricht hinzuzufügen.

  1. git status
  2. git add .\HelloWorld.ps1
  3. git commit -m “<commit message>”

3. Erstellen des GitHub-Repositorys

Die Arbeit mit einem lokalen Git-Repository ist zwar hilfreich, aber der Hauptzweck der Quellcodekontrolle ist die Zusammenarbeit mit anderen Personen an einem Projekt. Nun müssen Sie das lokale Git-Repository in ein zentrales Remote-Repository stellen, damit andere an dem Projekt mitarbeiten können. Durch die Speicherung des Projektcodes in einem zentralen Remote-Repository können andere Personen den Code zur Bearbeitung in ihr System kopieren.

Es gibt viele Möglichkeiten, ein zentrales Git-Repository zu erstellen. Eine einfache Option besteht darin, es in GitHub zu speichern. GitHub ist eine beliebte Implementierung von Git, die im kostenlosen Tarif das Hosting von Repositories ermöglicht.

Wählen Sie auf Ihrer GitHub-Profilseite oben Repositories und klicken Sie dann auf Neu.

Geben Sie auf dem Bildschirm Neues Repository erstellen einen eindeutigen Repository-Namen ein, der in Ihrem Konto noch nicht existiert. Ich empfehle, ihm denselben Namen zu geben wie dem Projekt auf Ihrem lokalen System, in diesem Fall „my_project“. Geben Sie anschließend eine Beschreibung des Projekts ein, geben Sie an, ob es sich um ein öffentliches oder privates Projekt handelt, und wählen Sie eine der Optionen, um zusätzliche Projektdateien zu initialisieren. Da Sie ein bestehendes Repository importieren, sollten Sie keine der zusätzlichen Dateien auswählen, da diese bereits im lokalen Repository vorhanden sein sollten (falls Sie sie erstellen). Nachdem Sie alle Einstellungen konfiguriert haben, gehen Sie auf Repository erstellen.

4. Vorhandenes lokales Git-Repository pushen

Nach der Erstellung bietet GitHub mehrere Optionen, um mit dem neuen Git-Repository anzufangen. Sie können es in Ihr lokales System kopieren, ein neues Repository auf Ihrem System erstellen und damit verknüpfen oder den Code aus einem anderen Repository importieren.

In unserem Fall wollen wir ein bestehendes Git-Repository über die Befehlszeile pushen. Wir haben bereits ein lokales Git-Repository, das wir mit unserem neuen Remote-GitHub-Repository verknüpfen und dessen Code wir dorthin pushen möchten. Wählen Sie das Kopiersymbol aus, um diesen Codeschnipsel zu speichern und ihn in unserem PowerShell-Terminal auszuführen.

Bevor wir den Code in unserem PowerShell-Terminal ausführen, lassen Sie uns den Zweck jedes Befehls verstehen. Jeder Befehl ist wichtig für das Mergen in Git.

Git Remote Add Origin

  1. git remote add origin https://github.com/JeffBrownTech/my_project.git

Dieser Befehl konfiguriert das neue GitHub-Repository als Remote-Repository und macht es ab diesem Moment zur Quelle. Wenn andere Personen Änderungen an dem in GitHub gehosteten Repository vornehmen, können Sie diese Aktualisierungen dann auf Ihr lokales System übertragen. Sie können die geänderte Einstellung überprüfen, indem Sie git remote -v ausführen. So wird überprüft, ob die Origin-URL dem Remote-Repository entspricht.

  1. git remote -v

Der Name „origin“ kann hier alles sein, was Sie wollen; der Industriestandard ist jedoch, die Remote-Verbindung des Repositorys „origin“ zu nennen.

Git Branch

  1. git branch -M main

Dieser Befehl erzwingt die Umbenennung des lokalen Branches in „main“, um sicherzustellen, dass er mit dem Namen des Haupt-Branches des GitHub-Repositorys übereinstimmt. Dieser Schritt ist möglicherweise nicht notwendig, sollte aber dennoch ausgeführt werden, um zu überprüfen, ob die Branch-Namen übereinstimmen.

Schließlich müssen wir noch unser lokales Repository mit dem Befehl git push in das Remote-GitHub-Repository pushen.

Git Push

  1. git push -u origin main

Hier bezieht sich origin auf das Remote-Repository, das wir zuvor konfiguriert haben, und main auf den Branch aus dem lokalen Repository, der in das Remote-Repository kopiert werden soll.

Da wir hier zum ersten Mal Code in das Remote-GitHub-Repository für den Haupt-Branch pushen, müssen wir den Parameter -u angeben, der ein Alias für –set-upstream ist. Durch das Setzen des Upstream-Branches wird der Standard-Remote-Branch für den aktuellen lokalen Branch konfiguriert. Wir können die Konfiguration dieser Beziehung in der Ausgabe des Push-Befehls sehen.

5. Aktualisiertes GitHub-Repository anzeigen

Aktualisieren Sie in GitHub die Seite des Repositorys, auf der derzeit die Codebeispiele angezeigt werden. Ihre lokalen Dateien sollten jetzt im Repository verfügbar sein. Für mein Projekt kann ich das Skript „HelloWorld.ps1“ mit meiner Commit-Nachricht sehen.

6. Zusammenführen nicht zusammengehöriger Verläufe

Beim Erstellen von GitHub-Repositories gibt es die Option, das Repository mit mehreren Dateien zu initialisieren, z. B. mit einer README.md-Datei. Diese Datei ist in Markdown geschrieben und ihr Inhalt wird auf der Repository-Seite angezeigt. Sie wird oft verwendet, um das Projekt zu erläutern oder zu dokumentieren, wie man das Projekt verwendet.

Da ich ein vorhandenes Repository aus meinem lokalen System importieren wollte, musste das Repository nicht mit dieser Datei initialisiert werden. Schauen wir uns jedoch ein Szenario an, in dem ich das Remote-Repository mit Dateien erstelle und es mit meinem lokalen Repository synchronisieren muss.

In GitHub habe ich ein neues Repository mit dem Namen my_project_2 zum Speichern meines zweiten PowerShell-Projekts erstellt. Ich habe das Kontrollkästchen während der Repository-Konfiguration aktiviert, damit eine README.md-Datei mit aufgenommen wird. So sieht dieses neue Projekt-Repository aus (achten Sie auf den Inhalt der angezeigten README-Datei):

Bevor ich zu meinem Terminal zurückgehe, benötige ich die URL für dieses Repository, damit ich es als „origin“ in meinem lokalen Repository hinzufügen kann. Diese URL können Sie finden, indem Sie die Schaltfläche Code auswählen und die HTTPS-URL kopieren.

Nun zurück zum PowerShell-Fenster: Hier habe ich das lokale Repository und den ersten Commit bereits erstellt. Zuerst muss ich die URL hinzufügen, die ich gerade als Quell-Repository kopiert habe, unter dem Namen „origin“:

  1. git remote add origin https://github.com/JeffBrownTech/my_project_2.git
  2. git remote -v

Als Nächstes möchte ich den Inhalt des Remote-GitHub-Repositorys auf mein lokales System abrufen, und zwar nur die Datei README.md. Das kann ich machen, indem ich den Befehl „git pull“ verwende und das „origin“-Remote-Repository und den lokalen Haupt-Branch angebe:

  1. git pull origin main

Dieser Befehl führt jedoch zu einem schwerwiegenden Fehler:

Fatal: refusing to merge unrelated histories

Da wir zwei nicht zusammengehörige Projekte mit unterschiedlichen Verläufen haben, weigert sich Git, die beiden zu mergen. Jedes Projekt hat seinen eigenen Satz von Commit-Verläufen, die nicht miteinander kompatibel sind. Glücklicherweise können wir Git mit dem Parameter –allow-unrelated-histories folgendermaßen dazu zwingen, die beiden trotz der nicht zusammengehörigen Verläufe zu mergen:

  1. git pull origin main –allow-unrelated-histories

Die README.md-Datei aus dem Remote-GitHub-Repository ist jetzt in meinem lokalen Projekt verfügbar. Von hier aus kann ich Änderungen an der README.md lokal vornehmen, diese committen und sie an GitHub zurück pushen.

In diesem Beitrag habe ich beschrieben, wie das Merging in Git mit einem lokalen Code-Repository funktioniert, das man mit einem Remote-GitHub-Repository verbindet. Wenn man seinen Code in einem Remote-Repository platziert, ermöglicht das die Zusammenarbeit mit anderen Personen, indem diese ihre Änderungen an den Projektcode pushen. Die Arbeit mit Git und Repositories ist eine wichtige Kompetenz für jeden Entwickler oder Administrator, der an einem Coding-Projekt zusammenarbeiten bzw. es freigeben möchte.