Grundlagen zu Git – Teil 1

Nachdem es in einem älteren Blogbeitrag um die Installation von Git unter Windows, Linux und macOS ging, widmet sich dieser Artikel den Grundlagen zu Git, wobei sich folgende Ausführungen primär an Einsteiger richten.

Klären wir zunächst aber die Frage, was Git eigentlich macht. Es handelt sich hierbei um eine Software zur Versionsverwaltung von Dateien. Anstatt von einer Datei ständig neue Versionen zu speichern, wird die Verwaltung unterschiedlicher Versionen im Hintergrund von Git übernommen. Dies hat den Vorteil, dass stets nur mit einer Datei gearbeitet werden. Damit dies funktioniert, legt Git im Projektverzeichnis ein (verstecktes) Unterverzeichnis mit dem Namen „.git“ an, in dem etwaige Änderungen festgehalten werden.

Grundeinstellungen

Sobald Git auf dem System ist, sollten der eigene Name und die E-Mail-Adresse konfiguriert werden:

$ git config --global user.name "Dein Name"
$ git config --global user.email "Deine E-Mail-Adresse"

Dies führt dazu, dass für Git eine Konfigurationsdatei mit der Bezeichnung .gitconfig angelegt wird, die sich im eigenen Benutzerverzeichnis befindet. Sofern noch keine weiteren Einstellungen vorgenommen wurden, sieht ihr Inhalt jetzt wie folgt aus:

[user]
    email = max@mustermann.de
    name = Max Mustermann

Es existieren noch weitere optionale Konfigurationsmöglichkeiten. Für eine bessere Lesbarkeit im Terminal kann zum Beispiel die farbige Markierung von Text aktiviert werden:

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

Ein lokales Repository anlegen

Und damit kann Git auch schon genutzt werden. Unter Linux und macOS können Git-Anweisungen in der Shell verwendet werden. Unter Windows steht die PowerShell zur Verfügung. Darüber hinaus wird auch eine Git-Bash installiert.

Git Bash window on Windows 10
Git Bash unter Windows 10

Die schlichte Eingabe des Befehls git zeigt die zur Verfügung stehenden Git-Befehle an. Wir wollen zunächst damit beginnen, ein lokales Repository zu erstellen, d.h. wir beginnen mit dem Befehl git init. Um folgende Schritte nachvollziehen zu können, macht es Sinn, hierfür ein Beispielprojekt zu verwenden. Für dieses Git-Tutorial habe ich mich für eine schlichte Internetseite entschieden. Es existiert lediglich eine Datei mit der Bezeichnung „index.html“, die sich bei mir im Verzeichnis „Website“ befindet. Der Inhalt der Datei sieht wie folgt aus:

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="utf-8">
  <title>Meine Internetseite</title>
  <!--
  <link rel="stylesheet" type="text/css" href"css/style.css">
  -->
</head>
<body>

  <header>
    <h1>Dies ist die Startseite</h1>
  <header>

</body>
</html>

In dem Verzeichnis „Website“, in dem sich die Datei „index.html“ befindet, wird nun ein neues Git-Repository erstellt:

$ git init

Dateien hinzufügen

In einem zweiten Schritt sind nun die Dateien zu diesem Repository hinzuzufügen:

$ git add .

Der Punkt hinter git add bedeutet, dass alle Dateien, die sich im aktuellen Verzeichnis befinden, hinzugefügt werden sollen. Git kümmert sich sozusagen ab jetzt um diese Dateien. Werden später weitere Dateien hinzugefügt, muss Git dies ebenfalls mitgeteilt werden. So würde beispielsweise eine Datei mit dem Namen „styles.css“ folgendermaßen hinzugefügt werden:

$ git add styles.css 

Jetzt kann unser erster commit erfolgen. Alle Dateien, die zuvor mit git add hinzugefügt, oder anders gesagt, für einen commit ausgewählt wurden, können nun an Git übergeben werden. Das bedeutet, dass alle bisherigen Änderungen an den Dateien in der Git-Chronik festgehalten werden.

Die Eingabe der Anweisung

$ git commit

in einer Shell (bash, zsh, etc.) wird aber zunächst dazu führen, dass ein Editor (vim) geöffnet wird. Denn es ist stets erforderlich, eine kurze Beschreibung hinzuzufügen. Aus diesem Grund ist es sinnvoll, die Option -m zu verwenden:

$ git commit -m "My first commit"

Dies erspart den Umweg über den vim-Editor.

Fall Ihr dennoch vim nutzen möchtet, hier die Vorgehensweise:

  1. Zunächst muss mit i in den Modus INSERT gewechselt werden, denn erst dann ist es möglich, Text hinzuzufügen.
  2. anschließend speichert Ihr den Text und beendet vim mit esc + :wq.

Status und Zweige

Mit der Anweisung

$ git status

wird der aktuelle Status ausgegeben. Falls der commit erfolgreich war, sollte folgendes erscheinen:

On branch main
nothing to commit, working tree clean

Interessant ist die Zeile „On branch main“. Damit hat es folgendes auf sich: In Git werden Zweige (branches) angelegt. Der Hauptzweig, der standardmäßig bei der Erstellung eines neuen Git-Repositorys angelegt wird, heißt main (früher: master). Es ist möglich weitere Zweige hinzuzufügen. Dies kann beispielsweise sinnvoll sein, wenn für ein Projekt unterschiedliche (neue) Features entwickelt werden sollen. Die Entwickler arbeiten dann lediglich mit den Versionen in den entsprechenden Zweigen. Ist die Entwicklung abgeschlossen könnte dann der Versionsstand eines (Neben-) Zweigs zum Hauptzweig (main) hinzugefügt werden. Falls sich aber zeigt, dass das Feature nicht umgesetzt werden kann, könnte die Arbeit daran eingestellt und dieser Zweig gelöscht werden. Bei alldem bleibt der Hauptzweig (main) stets unberührt.

Dateiänderungen

Früher oder später wird an dem Projekt gearbeitet werden. Und die dabei vorgenommenen Änderungen sollen selbstverständlich übermittelt werden (mit commit). In diesem Beispiel verändere ich in der Datei „index.html“ die Überschrift h1. Aus

<header>
  <h1>Dies ist die Startseite</h1>
<header>

wird

<header>
  <h1>Willkommen auf meiner Homepage!</h1>
<header>

Die Eingabe von

$ git status

führt jetzt zu folgender Information:

On branch main
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   index.html

no changes added to commit (use "git add" and/or "git commit -a")

Mit add können die Änderungen hinzugefügt werden, wobei ich hier wieder mit dem Punkt angebe, dass Änderungen an allen Dateien hinzugefügt werden sollen.

$ git add .

Alternativ könnte ich auch die Anweisung

$ git add index.html

verwenden. Anschließend lassen sie sich committen:

$ git commit -m "update h1 headline"
[main 4ddcebc] update h1 headline
 1 file changed, 1 insertion(+), 1 deletion(-)

Wie der Rückmeldung entnommen werden kann, wurde eine Datei geändert, die Datei „index.html“.

Nun kennt Ihr die wesentlichen Grundlagen von Git, wobei in diesem Beispiel nur ein lokales Repository angelegt wurde. In zukünftigen Artikeln werde ich auch Remote-Repositories ansprechen. Außerdem verlassen wir das Terminal und sehen uns an, wie die Git-Unterstützung in Code-Editoren aussieht.