Was ist die Versionskontrolle?

Abgeschlossen

Ein Versionskontrollsystem (VCS, Version Control System) ist ein Programm (oder mehrere Programme) für das Nachverfolgen von Änderungen an einer Sammlung von Dateien. VCS wird unter anderem verwendet, um auf einfache Weise frühere Versionen einzelner Dateien oder des gesamten Projekts abzurufen. Ein weiteres Ziel besteht darin, dass mit dem System mehrere Teammitglieder gleichzeitig an einem Projekt und sogar an denselben Dateien arbeiten können, ohne sich auf die Arbeit des anderen auszuwirken.

Eine alternative Bezeichnung für Versionskontrollsysteme lautet Softwarekonfigurationsverwaltungssystem (SCM, Software Configuration Management). Die beiden Begriffe werden häufig synonym verwendet, und in der Tat findet sich die offizielle Dokumentation zu Git unter git-scm.com. Technisch gesehen ist die Versionskontrolle nur eine der Praktiken der SCM gehören. Ein VCS kann auch für andere Projekte als Software verwendet werden, z. B. für Bücher und Onlinetutorials.

Mit einem VCS können Sie folgende Aktionen ausführen:

  • Sie sehen alle Änderungen, die an Ihrem Projekt vorgenommen wurden, und Sie sehen wer diese Änderungen wann vorgenommen hat.
  • Sie können bei jeder Änderung eine Nachricht einfügen, in der der Grund für die Änderung erläutert wird.
  • Sie können frühere Versionen des gesamten Projekts oder einzelner Dateien abrufen.
  • Sie können Verzweigungen erstellen, an denen versuchsweise Änderungen vorgenommen werden können. Dadurch können mehrere verschiedene Änderungssätze (z. B. Features oder Fehlerkorrekturen) gleichzeitig und ggf. auch von verschiedenen Personen bearbeitet werden, ohne dass dies Auswirkungen auf die Hauptverzweigung hat. Später können Sie dann die Änderungen, die Sie behalten möchten, mit der Hauptverzweigung zusammenführen.
  • Sie können eine Version mit einem Tag versehen, beispielsweise, um ein neues Release zu kennzeichnen.

Git ist ein schnelles, vielseitiges, in hohem Maße skalierbares, kostenloses Open-Source-VCS. Sein wichtigster Autor ist Linus Torvalds, von dem auch Linux stammt.

Verteilte Versionskontrolle

Frühere VCS-Instanzen wie CVS, Subversion (SVN) und Perforce verwendeten einen zentralen Server, um den Verlauf eines Projekts zu speichern. Diese Zentralisierung bedeutete, dass der eine Server auch zugleich ein potenzieller Single Point of Failure war.

Git ist verteilt. Dies bedeutet, dass der komplette Verlauf eines Projekts sowohl auf dem Client und auf dem Server gespeichert wird. Sie können Dateien ohne Netzwerkverbindung bearbeiten, sie lokal einchecken und mit dem Server synchronisieren, sobald eine Verbindung verfügbar ist. Wenn ein Server ausfällt, verfügen Sie noch immer über eine lokale Kopie des Projekts. Aus technischer Sicht benötigen Sie nicht einmal einen Server. Änderungen könnten auch per E-Mail weitergegeben oder mithilfe von Wechselmedien geteilt werden, aber in der Praxis nutzt niemand Git auf diese Weise.

Git-Terminologie

Um Git zu verstehen, müssen Sie die zugehörige Terminologie kennen. Im Folgenden finden Sie eine kurze Liste der Begriffe, die Git-Benutzer häufig verwenden. Machen Sie sich zu diesem Zeitpunkt keine Sorgen über die Details. Nachdem Sie die Übungen in diesem Modul durchgearbeitet haben, werden Sie mit allen diesen Begriffen vertraut sein.

  • Arbeitsstruktur: Die geschachtelten Verzeichnisse und Dateien, die das aktuell bearbeitete Projekt enthält.

  • Repository (Repo): Das Verzeichnis, das sich auf der obersten Ebene einer Arbeitsstruktur befindet und in dem Git alle Verlaufs- und Metadaten für ein Projekt speichert. Repositorys werden fast immer als Repos bezeichnet. Ein Bare-Repository ist ein Repository, das nicht Teil einer Arbeitsstruktur ist; es wird für Freigaben oder Sicherungen verwendet. Ein Bare-Repo ist üblicherweise ein Verzeichnis, dessen Name auf .git endet, z. B. project.git.

  • Hash: Eine von einer Hashfunktion erzeugte Zahl, die den Inhalt einer Datei oder eines anderen Objekts als feste Anzahl von Ziffern darstellt. Git verwendet Hashes, die 160 Bits lang sind. Ein Vorteil der Verwendung von Hashes besteht darin, dass Git erkennen kann, ob eine Datei geändert wurde, indem es einen Hashvorgang für ihren Inhalt durchführt und das Ergebnis mit dem vorherigen Hash vergleicht. Wenn der Zeit- und Datumsstempel der Datei geändert wird, der Dateihash jedoch unverändert bleibt, erkennt Git, dass der Dateiinhalt nicht geändert wurde.

  • Objekt: Ein Git-Repository enthält vier Typen von Objekten, die jeweils durch einen SHA-1-Hash eindeutig identifiziert werden. Ein Blob-Objekt enthält eine normale Datei. Ein Struktur-Objekt stellt ein Verzeichnis dar. Es enthält Namen, Hashes und Berechtigungen. Ein Commit-Objekt stellt eine bestimmte Version der Arbeitsstruktur dar. Ein Tag ist ein an einen Commit angefügter Name.

  • Commit: Committen bzw. „einen Commit ausführen“ bedeutet, ein Commitobjekt zu erstellen. Diese Aktion hat ihren Namen von den an eine Datenbank übermittelten Commits. Dies bedeutet, dass Sie die von Ihnen vorgenommenen Änderungen committen, damit andere diese ebenfalls sehen können.

  • Verzweigung: Eine Verzweigung ist eine benannte Reihe verknüpfter Commits. Der jüngste Commit in einer Verzweigung wird als Head bzw. Headcommit bezeichnet. Der Standardbranch, der erstellt wird, wenn Sie ein Repository initialisieren, wird als main und in Git häufig als master bezeichnet. Der Head der aktuellen Verzweigung wird als HEAD bezeichnet. Verzweigungen sind ein extrem nützliches Feature von Git, da sie es Entwicklern ermöglichen, unabhängig (oder gemeinsam) in Verzweigungen zu arbeiten und ihre Änderungen später in der Standardverzweigung zusammenzuführen.

  • Remote: Ein Remote ist ein benannter Verweis auf ein anderes Git-Repository. Wenn Sie ein Repository erstellen, erstellt Git ein Remoterepository namens origin, das als Standard-Remoterepository für Push- und Pull-Vorgänge dient.

  • Befehle, Unterbefehle und Optionen: Git-Vorgänge werden mithilfe von Befehlen wie git push und git pull ausgeführt. git ist der Befehl, und push oder pull ist der Unterbefehl. Der Unterbefehl gibt den Vorgang an, der von Git ausgeführt werden soll. Befehle werden häufig von Optionen begleitet, die Bindestriche (-) oder doppelte Bindestriche (--) verwenden. Beispiel: git reset --hard.

Diese und andere Begriffe wie push und pull werden bald mehr Sinn für Sie ergeben. Aber irgendwo müssen Sie anfangen. Möglicherweise finden Sie es auch hilfreich, nach Abschluss dieses Moduls hierher zurückzukehren und sich diese Glossarbegriffe nochmals anzusehen.

Die Git-Befehlszeile

Für Git stehen mehrere verschiedene GUIs zur Verfügung, darunter GitHub Desktop. Zahlreiche Programm-Editoren wie Visual Studio Code von Microsoft verfügen ebenfalls über eine Schnittstelle zu Git. Sie alle funktionieren anders und weisen unterschiedliche Einschränkungen auf. Keine von ihnen implementiert alle Funktionen von Git.

Die Übungen in diesem Modul verwenden die Git-Befehlszeile, insbesondere die in der Azure Cloud Shell ausgeführten Git-Befehle. Die Befehlszeilenschnittstelle von Git funktioniert jedoch unabhängig vom verwendeten Betriebssystem stets gleich. Außerdem können Sie über die Befehlszeile auf alle Funktionen von Git zugreifen. Entwickler, die Git nur über eine GUI anzeigen, werden gelegentlich mit Fehlermeldungen konfrontiert, die sich nicht beheben lassen, und müssen auf die Befehlszeile zurückgreifen, um weiterarbeiten zu können.

Git und GitHub

Wenn Sie mit Git arbeiten, möchten Sie möglicherweise die Unterschiede zwischen den Features in Git und denen in GitHub wissen.

Wie bereits erwähnt, ist Git ein verteiltes Versionskontrollsystem (DVCS, Distributed Version Control System), das von mehreren Entwicklern und anderen Mitwirkenden verwendet werden kann, um an einem Projekt zusammenzuarbeiten. Es bietet die Möglichkeit, mit einem oder mehreren lokalen Verzweigungen zu arbeiten und diese dann in ein Remoterepository zu verschieben.

GitHub ist eine Cloudplattform, die Git als Kerntechnologie verwendet. GitHub erleichtert die Zusammenarbeit an Projekten und stellt eine Website, weitere Befehlszeilentools und den gesamten Flow bereit, über den Entwickler und Benutzer zusammenarbeiten können. GitHub fungiert als das zuvor erwähnte „Remoterepository“.

Zu den wichtigsten Features von GitHub gehören:

  • Probleme
  • Diskussionen
  • Pull Requests
  • Benachrichtigungen
  • Bezeichnungen
  • Aktionen
  • Radgabeln
  • Projekte

Weitere Informationen zu GitHub finden Sie im Microsoft Learn-Modul Einführung in GitHub oder in der Hilfedokumentation Erste Schritte mit GitHub.

Der nächste Schritt besteht darin, Git einmal selbst auszuprobieren!