-
1. Erste Schritte
- 1.1 Über Versionskontrolle
- 1.2 Eine kurze Geschichte von Git
- 1.3 Was ist Git?
- 1.4 Die Kommandozeile
- 1.5 Git installieren
- 1.6 Erstmalige Git-Einrichtung
- 1.7 Hilfe bekommen
- 1.8 Zusammenfassung
-
2. Git Grundlagen
-
3. Git Branching
- 3.1 Branches im Überblick
- 3.2 Grundlegendes Branching und Merging
- 3.3 Branch-Management
- 3.4 Branching Workflows
- 3.5 Remote-Branches
- 3.6 Rebasing
- 3.7 Zusammenfassung
-
4. Git auf dem Server
- 4.1 Die Protokolle
- 4.2 Git auf einem Server einrichten
- 4.3 Generieren Ihres SSH-Public-Keys
- 4.4 Einrichten des Servers
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Drittanbieter-Hosting-Optionen
- 4.10 Zusammenfassung
-
5. Verteiltes Git
-
6. GitHub
-
7. Git-Werkzeuge
- 7.1 Revisionsauswahl
- 7.2 Interaktives Staging
- 7.3 Stashing und Bereinigen
- 7.4 Ihre Arbeit signieren
- 7.5 Suchen
- 7.6 Historie umschreiben
- 7.7 Reset entmystifiziert
- 7.8 Fortgeschrittenes Merging
- 7.9 Rerere
- 7.10 Debugging mit Git
- 7.11 Submodule
- 7.12 Bundling
- 7.13 Ersetzen
- 7.14 Credential-Speicher
- 7.15 Zusammenfassung
-
8. Git anpassen
-
9. Git und andere Systeme
- 9.1 Git als Client
- 9.2 Migration zu Git
- 9.3 Zusammenfassung
-
10. Git-Interna
- 10.1 Plumbing und Porcelain
- 10.2 Git-Objekte
- 10.3 Git-Referenzen
- 10.4 Packfiles
- 10.5 Die Refspec
- 10.6 Übertragungsprotokolle
- 10.7 Wartung und Datenwiederherstellung
- 10.8 Umgebungsvariablen
- 10.9 Zusammenfassung
-
Anhang A: Git in anderen Umgebungen
- A1.1 Grafische Oberflächen
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Zusammenfassung
-
Anhang B: Git in Ihre Anwendungen einbetten
- A2.1 Kommandozeilen-Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
Anhang C: Git-Befehle
- A3.1 Einrichtung und Konfiguration
- A3.2 Projekte abrufen und erstellen
- A3.3 Grundlegendes Snapshotting
- A3.4 Branching und Merging
- A3.5 Projekte teilen und aktualisieren
- A3.6 Inspektion und Vergleich
- A3.7 Debugging
- A3.8 Patching
- A3.9 E-Mail
- A3.10 Externe Systeme
- A3.11 Administration
- A3.12 Plumbing-Befehle
3.4 Git Branching - Branching Workflows
Branching Workflows
Jetzt, da Sie die Grundlagen von Branching und Merging beherrschen, was können oder sollten Sie damit tun? In diesem Abschnitt behandeln wir einige gängige Workflows, die dieses leichte Branching ermöglicht, damit Sie entscheiden können, ob Sie sie in Ihren eigenen Entwicklungszyklus integrieren möchten.
Long-Running Branches
Da Git eine einfache Drei-Wege-Zusammenführung verwendet, ist das mehrfache Zusammenführen eines Branches in einen anderen über einen langen Zeitraum im Allgemeinen einfach durchzuführen. Das bedeutet, Sie können mehrere Branches haben, die immer geöffnet sind und die Sie für verschiedene Phasen Ihres Entwicklungszyklus verwenden. Sie können regelmäßig von einigen dieser Branches in andere zusammenführen.
Viele Git-Entwickler haben einen Workflow, der diesen Ansatz verfolgt, zum Beispiel indem sie nur vollständig stabilen Code in ihrem master-Branch haben – möglicherweise nur Code, der veröffentlicht wurde oder veröffentlicht wird. Sie haben einen weiteren parallelen Branch namens develop oder next, von dem aus sie arbeiten oder den sie zur Überprüfung der Stabilität verwenden – er ist nicht unbedingt immer stabil, aber wann immer er einen stabilen Zustand erreicht, kann er in master zusammengeführt werden. Er wird verwendet, um Topic Branches (kurzlebige Branches, wie Ihr früherer iss53-Branch) zu integrieren, wenn sie bereit sind, um sicherzustellen, dass sie alle Tests bestehen und keine Fehler einführen.
Tatsächlich sprechen wir über Zeiger, die sich auf der Linie der von Ihnen erstellten Commits nach oben bewegen. Die stabilen Branches befinden sich weiter unten in Ihrer Commit-Historie und die Bleeding-Edge-Branches weiter oben in der Historie.
Es ist im Allgemeinen einfacher, sie als Arbeits-Silos zu betrachten, in denen Commits in ein stabileres Silo übergehen, wenn sie vollständig getestet sind.
Sie können dies für mehrere Stabilitätsstufen fortsetzen. Einige größere Projekte haben auch einen proposed- oder pu-Branch (proposed updates), der integrierte Branches enthält, die möglicherweise noch nicht für den next- oder master-Branch bereit sind. Die Idee ist, dass Ihre Branches verschiedene Stabilitätsstufen haben; wenn sie ein stabileres Niveau erreichen, werden sie in den übergeordneten Branch zusammengeführt. Wiederum ist es nicht notwendig, mehrere langfristige Branches zu haben, aber es ist oft hilfreich, insbesondere wenn Sie mit sehr großen oder komplexen Projekten arbeiten.
Topic Branches
Topic Branches sind jedoch bei Projekten jeder Größe nützlich. Ein Topic Branch ist ein kurzlebiger Branch, den Sie für eine einzelne bestimmte Funktion oder zugehörige Arbeit erstellen und verwenden. Dies ist etwas, das Sie wahrscheinlich noch nie mit einem VCS gemacht haben, da das Erstellen und Zusammenführen von Branches im Allgemeinen zu teuer ist. Aber in Git ist es üblich, mehrmals täglich Branches zu erstellen, daran zu arbeiten, sie zusammenzuführen und zu löschen.
Sie haben dies im letzten Abschnitt mit den iss53- und hotfix-Branches gesehen, die Sie erstellt haben. Sie haben ein paar Commits darauf gemacht und sie direkt nach dem Zusammenführen in Ihren Haupt-Branch gelöscht. Diese Technik ermöglicht es Ihnen, den Kontext schnell und vollständig zu wechseln – da Ihre Arbeit in Silos getrennt ist, in denen alle Änderungen in diesem Branch mit diesem Thema zu tun haben, ist es einfacher zu sehen, was während der Code-Überprüfung usw. passiert ist. Sie können die Änderungen dort für Minuten, Tage oder Monate aufbewahren und sie zusammenführen, wenn sie bereit sind, unabhängig von der Reihenfolge, in der sie erstellt oder bearbeitet wurden.
Betrachten Sie ein Beispiel, bei dem Sie einige Arbeiten durchführen (auf master), für ein Issue abzweigen (iss91), etwas daran arbeiten, von dem zweiten Branch abzweigen, um einen anderen Weg zur Behandlung desselben Dings auszuprobieren (iss91v2), zu Ihrem master-Branch zurückkehren und dort eine Weile arbeiten und dann dort abzweigen, um etwas zu tun, von dem Sie nicht sicher sind, ob es eine gute Idee ist (dumbidea-Branch). Ihre Commit-Historie würde ungefähr so aussehen
Nun, sagen wir, Sie entscheiden, dass Ihnen die zweite Lösung für Ihr Problem am besten gefällt (iss91v2); und Sie haben den dumbidea-Branch Ihren Kollegen gezeigt, und er erweist sich als genial. Sie können den ursprünglichen iss91-Branch wegwerfen (und die Commits C5 und C6 verlieren) und die anderen beiden zusammenführen. Ihre Historie sieht dann so aus
dumbidea und iss91v2Wir werden in Distributed Git detaillierter auf die verschiedenen möglichen Workflows für Ihr Git-Projekt eingehen. Lesen Sie daher dieses Kapitel, bevor Sie entscheiden, welches Branching-Schema Ihr nächstes Projekt verwenden wird.
Es ist wichtig, sich daran zu erinnern, dass diese Branches vollständig lokal sind, wenn Sie all dies tun. Wenn Sie verzweigen und zusammenführen, geschieht alles nur in Ihrem Git-Repository – es gibt keine Kommunikation mit dem Server.