git config

In diesem Artikel sehen wir uns den Befehl git config im Detail an. Wir haben die Nutzung von git config auf unserer Seite Einrichten eines Repositorys kurz angesprochen. Der Befehl git config ist eine praktische Funktion, die zum Einrichten von Git-Konfigurationswerten auf globaler oder auch lokaler Projektebene verwendet wird. Diese Konfigurationsebenen entsprechen den .gitconfig-Textdateien. Das Ausführen von git config modifiziert die Konfigurationstextdatei. Wir werden auf gebräuchliche Konfigurationseinstellungen wie E-Mail, Benutzername und Editor eingehen. Außerdem sprechen wir über Git-Aliasse, die das Einrichten von Kurzformen für häufig genutzte Git-Vorgänge ermöglichen. Wenn du dich mit git config und den verschiedenen Git-Konfigurationseinstellungen vertraut machst, wird dir dies bei der Erstellung eines leistungsstarken, benutzerdefinierten Git-Workflows helfen.

Anwendung

Der einfachste Use Case von git config ist das Aufrufen eines Konfigurationsnamens, um den definierten Wert für diesen Namen anzuzeigen. Konfigurationsnamen sind durch Punkte abgetrennte Strings, die je nach Hierarchie aus einem "Abschnitt" und einem "Schlüssel" bestehen. Ein Beispiel: user.email

git config user.email

In diesem Beispiel ist "email" eine dem Benutzerkonfigurationsblock untergeordnete Eigenschaft. Sofern diese konfiguriert ist, wird damit eine E-Mail-Adresse zurückgegeben, die Git den lokal erstellten Commits zuordnet.

Git-Konfigurationsebenen und -dateien

Bevor wir auf die Anwendung von git config eingehen, sollten wir uns zunächst mit Konfigurationsebenen befassen. Du kannst den Befehl git config mit Argumenten ergänzen, um festzulegen, auf welcher Konfigurationsebene er ausgeführt wird. Folgende Konfigurationsebenen können angegeben werden:

  • --local

Wenn keine andere Konfigurationsoption festgelegt wurde, geschehen Schreibvorgänge mit git config standardmäßig auf lokaler Ebene. Die lokale Konfiguration wird auf das Repository angewendet, in dessen Zusammenhang der Befehl git config ausgeführt wird. Die lokalen Konfigurationswerte werden in einer Datei im .git-Verzeichnis des Repositorys gespeichert: .git/config
 

  •  --global

Die Konfiguration auf globaler Ebene ist benutzerspezifisch, das heißt, sie wird auf einen Benutzer des Betriebssystems angewendet. Die globalen Konfigurationswerte werden in einer Datei im Hauptverzeichnis des Benutzers gespeichert. ~ /.gitconfig bei Unix-Systemen und C:\Users\<username>\.gitconfig unter Windows
 

  •  --system

Die Konfiguration auf Systemebene wir auf der gesamten Maschine angewendet. Das umfasst alle Benutzer eines Betriebssystems und alle Repositorys. Die Datei für die Systemebenenkonfiguration liegt in einer gitconfig-Datei außerhalb des System-Root-Pfads unter $(Präfix)/etc/gitconfig bei Unix-Systemen. Unter Windows findest du diese Datei unter C:\Documents and Settings\All Users\Application Data\Git\config bei Windows XP und unter C:\ProgramData\Git\config bei Windows Vista und neueren Versionen.

Die Priorität der Konfigurationsebenen lautet: lokale Ebene, globale Ebene, Systemebene. Auf der Suche nach Konfigurationswerten setzt Git also an der lokalen Ebene an und arbeitet sich zur Systemebene hoch.
 

Einen Wert schreiben

Aufbauend auf unserem Wissen über git config sehen wir uns nun ein Beispiel an, bei dem ein Wert eingegeben wird:

git config --global user.email "your_email@example.com"

In diesem Beispiel wird der Wert deine_email@beispiel.com für den Konfigurationsnamen user.email definiert. Mit dem Flag --global wird dieser Wert für den aktuellen Benutzer des Betriebssystems festgelegt.

Git-Konfigurationseditor: core.editor

Bei vielen Git-Befehlen öffnet sich zur weiteren Eingabe ein Texteditor. Am häufigsten wird git config zur Konfiguration des Editors in Git verwendet. Im Folgenden werden beliebte Editoren und die entsprechenden git config-Befehle aufgelistet:

Editor config-Befehl
Atom ~ git config --global core.editor "atom --wait"~
emacs ~ git config --global core.editor "emacs"~
Nano ~ git config --global core.editor "nano -w"~
vim ~ git config --global core.editor "vim"~
Sublime Text (Mac) ~ git config --global core.editor "subl -n -w"~
Sublime Text (Windows, 32-Bit-Installation) ~ git config --global core.editor "'c:/program files (x86)/sublime text 3/sublimetext.exe' -w"~
Sublime Text (Windows, 64-Bit-Installation) ~ git config --global core.editor "'c:/program files/sublime text 3/sublimetext.exe' -w"~
Textmate ~ git config --global core.editor "mate -w"~

 

Merge-Tools

Git startet im Falle eines Merge-Konflikts ein "Merge-Tool". Standardmäßig nutzt Git dabei eine interne Implementierung eines gängigen Unix-Diff-Programms. Die interne Git-Diff-Anzeige zeigt nur eine Minimalansicht der Merge-Konflikte. Alternativ kannst du eine der vielen Merge-Konfliktlösungen verwenden. Einen Überblick über die zahlreichen Merge-Tools und die Konfiguration erhältst du in unserem Leitfaden Tipps und Tools für Merge-Konflikte in Git

git config --global merge.tool kdiff3

Farbiger Output

Git unterstützt einen farbigen Terminal-Output zum schnellen Lesen des Git-Outputs. Du kannst deinen Git-Output anpassen, um ein personalisiertes Farbschema zu verwenden. Diese Farbwerte werden mit dem Befehl git config festgelegt.

color.ui

Das ist die Master-Variable für die Git-Farbanzeige. Wenn du sie auf "false" setzt, wird sämtlicher farbiger Terminal-Output in Git deaktiviert.
 

$ git config --global color.ui false

Standardmäßig ist color.ui auf automatisch gesetzt und zeigt den unmittelbaren Terminal-Output farbig an. Wird der Output zu einer Datei oder einem anderen Prozess umgeleitet, wird der Code bei der automatischen Einstellung nicht farbig ausgegeben.

Du kannst den Wert color.ui auf "always" setzen, um auch bei der Umleitung zu Dateien oder Pipes eine farbige Codeausgabe zu erhalten. Das kann zu unvorhergesehenen Problemen führen, wenn die Pipe, die die Daten erhält, keinen farbkodierten Input erwartet.

Git-Farbwerte

Neben color.ui gibt es noch weitere genauere Farbeinstellungen. Wie auch color.ui können all diese Farbeinstellungen auf "false", "auto" oder "always" gesetzt werden. Außerdem kannst du einen bestimmten Farbwert für sie festlegen. Hier ein paar Beispiele für unterstützte Farbwerte:

  • normal
  • black
  • red
  • green
  • yellow
  • blue
  • magenta
  • cyan
  • weiß

Farben können auch mit hexadezimalen Farbdefinitionen angegeben werden, wie etwa #ff0000, oder ANSI-256-Farbwerten, falls dein Terminal diese unterstützt.

Einstellungen zur Farbkonfiguration in Git

1. color.branch 

  • Konfiguriert die Farbe, in der der Git-Branch-Befehl ausgegeben wird 

2. color.branch.<slot

  • Dieser Wert ist auch auf den Git-Branch-Output anwendbar. Für den <slot> kannst du Folgendes einsetzen: 
    • 1. current: der aktuelle Branch 
    • 2. local: ein lokaler Branch 
    • 3. remote: ein Remote-Branch-Ref in Refs/Remotes 
    • 4. upstream: ein Upstream-Tracking-Branch 
    • 5. plain: ein beliebiger anderer Ref

3. color.diff 

  • Zur farbigen Ausgabe bei git diff, git log und git show 

4. color.diff.<slot

  • Wenn du einen Wert für <slot> unter color.diff konfigurierst, weiß Git, auf welches Stück Text welche Farbe angewendet werden soll. 
    • 1. context: Der Diff-Kontext-Text. Als Git-Kontext versteht man die Textzeilen in einem Diff oder Patch, in denen Änderungen hervorgehoben werden. 
    • 2. plain: ein anderer Ausdruck für "context" 
    • 3. meta: farbiger Output der Diff-Metadaten 
    • 4. frag: farbiger Output der "Hunk-Kopfzeile" oder der "Funktion in der Hunk-Kopfzeile" 
    • 5. old: farbiger Output der entfernten Zeilen im Diff 
    • 6. new: zeigt die hinzugefügten Diff-Zeilen in Farbe an 
    • 7. commit: farbige Ausgabe der Commit-Header innerhalb des Diffs 
    • 8. whitespace: Farbige Markierung von Leerzeichenfehlern in einer Diff

5. color.decorate.<slot

  • Passt die Farbe für den Output des Befehls git log --decorate an. Für den <slot> werden folgende Werte unterstützt: branch, remoteBranch, tag, stash und HEAD. Sie sind jeweils auf lokale Branches, Remote-Tracking-Branches, Tags, gestashte Änderungen und den HEAD anwendbar. 

6. color.grep

  • Bewirkt, dass "git grep"-Output farbig ist 

7. color.grep.<slot

  • Gilt auch für git grep. Die Variable <slot> legt fest, welcher Teil der grep-Ausgabe eingefärbt werden soll. 
    • 1. context: nicht zusammengehöriger Text in Kontextzeilen 
    • 2. filename: Präfix des Dateinamens 
    • 3. function: Zeilen mit Funktionsnamen 
    • 4. linenumber: Präfix der Zeilennummer 
    • 5. Übereinstimmung: übereinstimmender Text 
    • 6. matchContext: zusammengehöriger Text in Kontextzeilen 
    • 7. matchSelected: zusammengehöriger Text in ausgewählten Zeilen 
    • 8. selected: nicht zusammengehöriger Text in ausgewählten Zeilen 
    • 9. separator: Trennzeichen zwischen Feldern in einer Zeile (:, - und =) und zwischen Hunks (--) 

8. color.interactive 

  • Mit dieser Variable werden interaktive Anweisungen und Output farblich dargestellt. Beispiele dafür sind git add --interactive und git clean --interactive. 

9. color.interactive.<slot> 

  • Anstelle der Variable <slot> kannst "interaktiven Output" konkret festlegen. Die verfügbaren Werte für <slot>, die auf den jeweiligen interaktiven Output angewendet werden, lauten prompt, header, help und error. 

10. color.pager

  • Aktiviert oder deaktiviert farbigen Output bei Verwendung des Pagers 

11. color.showBranch 

  • Aktiviert oder deaktiviert farbigen Output für den Befehl "git show-branch" 

12. color.status 

  • Ein Boolescher Wert, der den farbigen Output für "git status" aktiviert oder deaktiviert 

13. color.status.<slot>

Zum Festlegen individueller Farben für bestimmte "git status"-Elemente. <slot> unterstützt folgende Werte:

  • 1. header
    • Betrifft den Kopfzeilentext des Statusbereichs
  • 2. added oder updated
    • Beide Zieldateien, die hinzugefügt, aber nicht committet wurden
  • 3. changed
    • Betrifft geänderte Dateien, die dem Git-Index noch nicht hinzugefügt wurden
  • 4. untracked
    • Nimmt Dateien ins Visier, die von Git nicht verfolgt werden
  • 5. branch
    • Stellt den aktuellen Branch in Farbe dar
  • 6. nobranch
    • Die Farbe der Warnung "Kein Branch"
  • 7. unmerged
    • Hebt Dateien mit nicht gemergten Änderungen farbig hervor

Aliasse

Vielleicht kennst du Aliasse bereits aus den Befehlszeilen deines Betriebssystems. Aliasse sind benutzerdefinierte Kurzformen, mit denen längere Befehle oder eine Kombination aus Befehlen verkürzt werden. Mit Aliassen sparst du dir die Zeit und den Aufwand zur Eingabe häufig verwendeter Befehle. Git verfügt über ein eigenes System von Aliassen. Git-Aliasse werden oft zum Verkürzen von Commit-Befehlen gebraucht. Git-Aliasse werden in Git-Konfigurationsdateien gespeichert. Du kannst also mit dem Befehl git config Aliasse konfigurieren.

git config --global alias.ci commit

Hier wird ein "ci"-Alias für den Befehl git commit erstellt. Danach kannst du git commit mit git ci ausführen. Aliasse können sich auch auf andere Aliasse beziehen, um sich zu starken Kombinationen zu verbinden.

git config --global alias.amend ci --amend

In diesem Beispiel wird eine Alias-Korrektur vorgenommen, wobei der Alias "ci" mit dem Flag --amend zu einem neuen Alias zusammengesetzt wird.

Formatierung und Leerräume

Git bietet zahlreiche Features, um Probleme mit Leerräumen anzuzeigen, die bei der Anwendung von "git diff entstanden" sind. Probleme mit Leerräumen werden in der mit color.diff.whitespace konfigurierten Farbe hervorgehoben.

Folgende Funktionen sind standardmäßig aktiviert:

  • blank-at-eol hebt verwaiste Leerräume am Zeilenende hervor.
  • space-before-tab hebt ein Leerzeichen hervor, das vor einem Tabulatorzeichen steht, wenn damit eine Zeile eingerückt wird.
  • blank-at-eof hebt die Leerzeilen am Ende einer Datei hervor.

Folgende Funktionen sind standardmäßig aktiviert:

  • indent-with-non-tab hebt eine Zeile hervor, die mit Leerzeichen statt Tabstoppzeichen eingerückt ist.
  • tab-in-indent hebt die erste Tab-Einrückung als Fehler hervor
  • trailing-space ist die Kurzform der Kombination von blank-at-eol und blank-at-eof.
  • cr-at-eol hebt einen Zeilenumbruch am Zeilenende hervor.
  • tabwidth=<n> definiert, wie viele Zeichenpositionen ein Tabulatorzeichen belegt. Der Standardwert ist 8. Zulässig sind die Werte 1 bis 63.

Summary

In diesem Artikel haben wir die Anwendung des git config-Befehls besprochen. Wir haben erläutert, warum dieser Befehl im Dateisystem eine geeignete Methode zum Bearbeiten von git config-Rohdatendateien ist. Außerdem haben wir uns grundlegende Lese- und Schreibvorgänge für Konfigurationsoptionen angesehen. Dabei haben wir gängige Konfigurationsmuster betrachtet:

  • Konfiguration des Git-Editors
  • Überschreiben von Konfigurationsebenen
  • Zurücksetzen von Standardkonfigurationen
  • Anpassen der Git-Farbanzeige

Allgemein ist git config ein Hilfswerkzeug, mit dem sich git config-Rohdatendateien auf Festplatten schneller bearbeiten lassen. Wir haben die Optionen zur persönlichen Anpassung ausführlich behandelt. Zum Einrichten eines Repositorys sind Grundlagenkenntnisse der Git-Konfigurationsoptionen erforderlich. In unserem Leitfaden zeigen wir dir das Wesentliche.
 

Du möchtest mit Git arbeiten?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen