Git-Konfigurationsbereiche: Globale, systemweite und repository-spezifische Einstellungen erklärt

Verstehen Sie die Git-System-, globalen und lokalen Konfigurationsbereiche, wo sie sich befinden und wie die Rangfolge Ihre Einstellungen beeinflusst.

Git-Konfigurationsbereiche: Globale, systemweite und repository-spezifische Einstellungen erklärt

Git-Konfigurationsbereiche erklären, warum Git manchmal einen anderen Namen, eine andere E-Mail, einen anderen Editor, ein anderes Merge-Tool oder einen anderen Standard-Branch verwendet als erwartet. Derselbe Schlüssel kann in mehreren Dateien vorhanden sein, und die spezifischere Datei gewinnt.

Sobald Sie wissen, wo systemweite, globale und lokale Einstellungen gespeichert sind, können Sie persönliche Standardwerte festlegen, ohne versehentlich jedes Repository auf dem Rechner zu ändern.

Die Git-Konfigurationshierarchie: Rangfolge

Git liest Konfigurationseinstellungen aus mehreren Quellen, und diese Quellen werden in einer bestimmten Rangfolge verarbeitet. Wenn derselbe Konfigurationsschlüssel in mehr als einem Bereich definiert ist, überschreibt die Einstellung aus dem spezifischeren Bereich die Einstellung aus dem weniger spezifischen Bereich. Diese Hierarchie ist für ein vorhersagbares Verhalten entscheidend:

  1. Repository-spezifische (lokale) Konfiguration: Diese Einstellungen werden in der Datei .git/config eines bestimmten Repositorys gespeichert. Sie sind am spezifischsten und haben Vorrang vor globalen und systemweiten Einstellungen. Ideal für projektspezifische Regeln.
  2. Globale (Benutzer-)Konfiguration: Diese Einstellungen gelten für alle Repositorys, die mit einem bestimmten Benutzerkonto auf einem Rechner verbunden sind. Sie werden in einer Datei ~/.gitconfig (unter Linux/macOS) oder C:\Users\<Benutzername>\.gitconfig (unter Windows) gespeichert. Globale Einstellungen überschreiben systemweite Einstellungen.
  3. Systemweite Konfiguration: Diese Einstellungen gelten für alle Benutzer und alle Repositorys auf einem bestimmten Rechner. Sie befinden sich normalerweise in /etc/gitconfig (unter Linux/macOS) oder C:\Programme\Git\etc\gitconfig (unter Windows). Systemweite Einstellungen sind am wenigsten spezifisch und werden von globalen und lokalen Einstellungen überschrieben.

Hinweis: Git kann auch $XDG_CONFIG_HOME/git/config oder ~/.config/git/config als benutzerspezifische Konfigurationsdatei lesen. Wenn sowohl diese Datei als auch ~/.gitconfig existieren, liest Git beide; Werte aus ~/.gitconfig haben normalerweise Vorrang, da sie später gelesen werden.

1. Systemweite Konfiguration (--system)

Systemweite Konfigurationen sind der breiteste Bereich und betreffen alle Git-Benutzer und alle Repositorys auf einem bestimmten Rechner. Diese Einstellungen werden typischerweise für rechnerweite Standardwerte oder von Systemadministratoren durchgesetzte Richtlinien verwendet.

Wo wird sie gespeichert?

  • Linux/macOS: /etc/gitconfig
  • Windows: C:\Programme\Git\etc\gitconfig (oder ähnlicher Pfad je nach Installation)

Wann sollte man sie verwenden?

  • Rechnerweite Standardwerte: Einrichten des Standard-core.editor oder color.ui für alle Benutzer.
  • Unternehmensweite Richtlinien: Sicherstellen, dass alle Entwickler auf einem gemeinsam genutzten Rechner bestimmte Git-Verhalten einhalten.
  • Sicherheitseinstellungen: Deaktivieren bestimmter unsicherer Operationen für alle Benutzer.

Praktische Beispiele

Um alle systemweiten Einstellungen anzuzeigen:

git config --system --list

Um einen systemweiten Standard-Benutzernamen festzulegen (erfordert Administratorrechte):

sudo git config --system user.name "Standard-Git-Benutzer"

Um einen systemweiten Standard-Texteditor zu konfigurieren:

sudo git config --system core.editor "nano"

Warnung: Das Ändern systemweiter Konfigurationen erfordert Administratorrechte und wirkt sich auf die gesamte Git-Nutzung auf dem Rechner aus. Gehen Sie vorsichtig vor und verwenden Sie es nur, wenn nötig.

2. Globale Konfiguration (--global)

Globale Konfigurationen sind benutzerspezifisch und gelten für alle Git-Repositorys, mit denen Sie auf Ihrem Benutzerkonto auf einem bestimmten Rechner interagieren. Dies ist der häufigste Bereich für persönliche Einstellungen.

Wo wird sie gespeichert?

  • Linux/macOS: ~/.gitconfig
  • Windows: C:\Users\<Benutzername>\.gitconfig

Wann sollte man sie verwenden?

  • Ihre persönliche Identität: Festlegen Ihres user.name und user.email, die standardmäßig für alle Ihre Commits verwendet werden.
  • Bevorzugte Aliase: Definieren von Abkürzungen für häufig verwendete Git-Befehle.
  • Standard-UI-Einstellungen: Setzen von color.ui auf auto oder Konfigurieren Ihres bevorzugten Texteditors (core.editor).
  • Standard-Branching-Verhalten: Zum Beispiel pull.rebase.

Praktische Beispiele

Um alle globalen Einstellungen anzuzeigen:

git config --global --list

Um Ihren globalen Benutzernamen und Ihre E-Mail festzulegen (sehr empfehlenswerter erster Schritt für jeden Git-Benutzer):

git config --global user.name "Ihr Name"
git config --global user.email "[email protected]"

Um einen globalen Alias für git status zu erstellen:

git config --global alias.st "status"

Jetzt können Sie git st anstelle von git status eingeben.

Um Ihren bevorzugten Editor festzulegen:

git config --global core.editor "code --wait"

Dies setzt VS Code als Standardeditor für Git-Operationen wie Commit-Nachrichten.

Tipp: Setzen Sie Ihre globalen user.name und user.email frühzeitig, um sicherzustellen, dass Ihre Commits korrekt zugeordnet werden.

3. Repository-spezifische (lokale) Konfiguration

Repository-spezifische oder lokale Konfigurationen sind die granularsten. Diese Einstellungen gelten nur für das bestimmte Git-Repository, in dem Sie gerade arbeiten. Sie sind entscheidend, um das Verhalten von Git an die spezifischen Anforderungen eines einzelnen Projekts anzupassen.

Wo wird sie gespeichert?

  • Innerhalb der Datei .git/config im Stammverzeichnis Ihres Git-Repositorys.

Wann sollte man sie verwenden?

  • Projektspezifische Identität: Verwenden einer anderen E-Mail-Adresse für Arbeitsprojekte im Vergleich zu persönlichen Projekten (z.B. [email protected] für die Arbeit, [email protected] für private Projekte).
  • Projektspezifische Hooks: Konfigurieren von pre-commit- oder post-merge-Hooks, die für das Repository einzigartig sind.
  • Remote-URLs: Definieren mehrerer Remotes oder spezifischer Push-/Pull-URLs.
  • Branch-spezifische Einstellungen: Zum Beispiel Festlegen von branch.<name>.remote oder branch.<name>.merge.
  • Kernkonfiguration: Setzen von core.autocrlf oder core.whitespace für ein bestimmtes Projekt basierend auf dessen Codierungsstandards.

Praktische Beispiele

Navigieren Sie zuerst zum Stammverzeichnis Ihres Repositorys.

Um alle lokalen Einstellungen (und geerbte globale/systemweite Einstellungen) anzuzeigen:

git config --list

Um eine projektspezifische E-Mail-Adresse festzulegen, die Ihre globale E-Mail überschreibt:

git config user.email "[email protected]"

Um während git fetch oder git pull für ein bestimmtes Projekt empfangene Objekte zu überprüfen:

git config fetch.fsckObjects true

Um einen lokalen Alias spezifisch für dieses Projekt festzulegen (z.B. für einen komplexen projektspezifischen Befehl):

git config alias.log-compact "log --pretty=oneline --abbrev-commit --graph"

Best Practice: Verwenden Sie lokale Konfigurationen für alle Einstellungen, die keine anderen Repositorys beeinflussen sollten. Dies hält Ihre globalen Einstellungen sauber und verhindert versehentliche Auswirkungen auf nicht verwandte Projekte.

Anzeigen von Konfigurationseinstellungen

Über --list hinaus können Sie einzelne Konfigurationsschlüssel überprüfen oder den Bereich direkt angeben.

Alle Einstellungen anzeigen (--list)

Um alle Konfigurationen zu sehen, die für Ihren aktuellen Kontext gelten, einschließlich systemweiter, globaler und lokaler Einstellungen, und wie sie basierend auf der Rangfolge aufgelöst werden:

git config --list --show-origin

Dieser Befehl ist sehr nützlich, da er nicht nur die Schlüssel-Wert-Paare anzeigt, sondern auch die Datei, aus der jede Einstellung stammt. Dies hilft enorm beim Debuggen, wenn Sie unsicher sind, welche Einstellung Vorrang hat.

Einen bestimmten Schlüssel anzeigen

Um den Wert eines bestimmten Konfigurationsschlüssels (z.B. user.name) zu überprüfen:

git config user.name

Git gibt den effektiven Wert zurück, der gemäß der Hierarchie aufgelöst wird.

Um den Wert eines bestimmten Schlüssels in einem bestimmten Bereich zu überprüfen:

git config --global user.name # Zeigt nur globalen user.name
git config --system core.editor # Zeigt nur systemweiten core.editor

Konflikte und Rangfolge lösen

Zu verstehen, wie Git Konflikte löst, ist der Schlüssel zur Fehlerbehebung bei unerwartetem Verhalten. Wenn git config --list innerhalb eines Repositorys ausgeführt wird, zeigt Git die effektiven Einstellungen an. Wenn user.email global und lokal gesetzt ist, wird die lokale Einstellung angezeigt, da sie Vorrang hat.

Lassen Sie uns dies anhand eines Beispiels veranschaulichen:

  1. System: /etc/gitconfig hat user.name = "System-Standardbenutzer"
  2. Global: ~/.gitconfig hat user.name = "Mein globaler Name" und user.email = "[email protected]"
  3. Lokal: .git/config hat user.name = "Projektspezifischer Benutzer" und user.email = "[email protected]"

Wenn Sie sich im lokalen Repository befinden und git config --list ausführen, würden Sie sehen:

  • user.name=Projektspezifischer Benutzer (Lokal überschreibt Global, das System überschreibt)
  • [email protected] (Lokal überschreibt Global)

Wenn das lokale Repository user.name nicht konfiguriert hätte, würde git config user.name Mein globaler Name zurückgeben.

Dieser kaskadierende Effekt bietet immense Flexibilität. Sie setzen Ihre allgemeinen Präferenzen global und überschreiben dann nur das Nötigste auf Projektebene, wodurch Ihre globale Umgebung sauber und Ihre Projektumgebungen maßgeschneidert bleiben.

Praktische Anwendungsfälle und Best Practices

  • Benutzeridentität: Setzen Sie immer Ihre globalen user.name und user.email. Überschreiben Sie user.email lokal nur, wenn die Projektanforderungen eine andere Adresse vorschreiben (z.B. Arbeits- vs. Privatkonten).
  • Aliase: Definieren Sie allgemeine Aliase (wie st für status, co für checkout, br für branch) global für Ihre persönliche Produktivität. Verwenden Sie lokale Aliase sparsam für sehr projektspezifische, komplexe Befehle.
  • Hooks: Speichern Sie allgemeine Utility-Hooks (z.B. einfache Formatierungsprüfungen) global, wenn sie für alle Repos gelten sollen. Für komplexe, projektspezifische CI/CD-Integration oder Code-Stil-Durchsetzung verwenden Sie lokale Repository-Hooks, die oft von den Projektmitarbeitern verwaltet werden.
  • Editoren: Setzen Sie core.editor global auf Ihren bevorzugten Texteditor. Dies stellt sicher, dass Git Ihr bevorzugtes Tool für Commit-Nachrichten, Rebase-Anweisungen usw. in all Ihrer Arbeit verwendet.
  • Leerzeichen und Zeilenumbrüche: core.autocrlf und core.whitespace sind häufige Konfigurationselemente. Diese global zu setzen, mag für die meisten ausreichen, aber bestimmte Projekte können lokale Überschreibungen erfordern, wenn sie strenge oder ungewöhnliche Konventionen haben (z.B. ein altes Projekt, das ausschließlich CRLF unter Linux verwendet).

Abschließende Erkenntnis

Verwenden Sie die globale Konfiguration für Ihre normale Identität und Präferenzen, die lokale Konfiguration für projektspezifische Regeln und die systemweite Konfiguration nur, wenn ein rechnerweiter Standard beabsichtigt ist. Wenn Git sich anders verhält als erwartet, ist git config --list --show-origin der schnellste Weg, um die verantwortliche Datei zu finden.