Wenn man auf GitHub unter einem persönlichen Alias committen möchte, in Azure DevOps jedoch mit der Unternehmens‑Identität, empfiehlt sich eine saubere Trennung der Git‑Identitäten anhand des Projektpfads.
Die folgende Lösung nutzt Conditional Includes in Git und funktioniert zuverlässig unter Git for Windows.
Voraussetzungen
- Git for Windows ≥ 2.40
- Windows‑Umgebung (Beispiele beziehen sich auf
C:\‑Pfade)
Version prüfen:
git --version
Globale Git‑Konfiguration
Die globale Git‑Konfiguration befindet sich unter:
%USERPROFILE%\.gitconfig
Hier wird die Standard‑Identität hinterlegt, z. B. die Unternehmens‑Identität für Azure DevOps:
[user]
name = Kirsten Kluge
email = Kirsten.Kluge@awesomecompany.com
useConfigOnly = true
useConfigOnly = true stellt sicher, dass Git keine impliziten Fallback‑Identitäten verwendet und verhindert versehentliche Commits mit falschem Absender.
Pfadbasierte Identität für GitHub
Alle GitHub‑Projekte liegen unter einem gemeinsamen Ordner:
C:/Arbeit/work/github/
Am Ende der globalen .gitconfig wird nun ein Conditional Include ergänzt:
[includeIf "gitdir:**/work/github/**"]
path = C:/Arbeit/work/github/.gitconfig
- das Pattern ist bewusst generisch gewählt
- neue GitHub‑Projekte erfordern keine Anpassung der globalen Config
- der Include greift nur für Unterordner, nicht für den Ordner selbst
Lokale GitHub‑Konfiguration
Im GitHub‑Root liegt eine eigene .gitconfig:
C:/Arbeit/work/github/.gitconfig
Inhalt:
[user]
name = Kirsten Kluge
email = Kirsten.Kluge@githubemail.com
Diese Identität gilt automatisch für alle Git‑Repositories unterhalb dieses Pfads.
Überprüfung der aktiven Identität
Innerhalb eines GitHub‑Repositories:
C:\Arbeit\work\github\meinProjekt> git config user.name
Kirsten Kluge
C:\Arbeit\work\github\meinProjekt> git config user.email
Kirsten.Kluge@githubemail.com
Außerhalb des GitHub‑Pfads:
C:\Arbeit\work> git config user.name
Kirsten Kluge
C:\Arbeit\work> git config user.email
Kirsten.Kluge@awesomecompany.com
Mehrere Kunden unter einem gemeinsamen work‑Ordner
Neben GitHub‑Projekten existieren häufig mehrere Kundenprojekte unter einem gemeinsamen Arbeitsverzeichnis:
C:/Arbeit/work/
├── .gitconfig
├── github/
│ ├── .gitconfig
│ └── projekt-x/
│ └── .git/
├── kunde-a/
│ ├── .gitconfig
│ └── projekt1/
│ └── .git/
├── kunde-b/
│ ├── .gitconfig
│ └── projekt2/
│ └── .git/
└── kunde-c/
└── projekt3/
└── .git/
workist der feste Root‑Ordner- jeder Kundenordner kann eine eigene
.gitconfigenthalten - der Dateiname ist überall bewusst einheitlich
Globale Einbindung des work‑Ordners
In der globalen %USERPROFILE%\.gitconfig wird einmalig festgelegt, dass für alle Repositories unterhalb von work eine zusätzliche Konfiguration geladen wird:
[includeIf "gitdir/i:**/work/**"]
path = C:/Arbeit/work/.gitconfig
Diese Regel muss nie wieder angepasst werden, auch wenn neue Kunden hinzukommen.
Zentrale work/.gitconfig als Verteiler
Die Datei C:/Arbeit/work/.gitconfig fungiert als Verteiler und entscheidet anhand des Pfads, welche kundenbezogene Konfiguration geladen wird:
[includeIf "gitdir/i:**/work/kunde-a/**"]
path = C:/Arbeit/work/kunde-a/.gitconfig
[includeIf "gitdir/i:**/work/kunde-b/**"]
path = C:/Arbeit/work/kunde-b/.gitconfig
- alle Dateien heißen
.gitconfig - Git unterscheidet ausschließlich anhand des Pfads, nicht anhand des Dateinamens
- neue Kunden erfordern nur einen neuen Eintrag hier, nicht in der globalen Config
Kunden‑spezifische .gitconfig
Im jeweiligen Kundenordner liegt die eigentliche Identität:
[user]
name = Kirsten Kluge
email = kirsten@kunde-a.de
useConfigOnly = true
Diese Konfiguration gilt automatisch für alle Repositories unterhalb dieses Kundenordners.
Technische Grenze von Git
Git kann keine .gitconfig automatisch aus dem Parent‑Ordner laden.
Alle Includes müssen explizit über einen festen Pfad erfolgen.
Das bedeutet:
- ein vollständig dynamisches „nimm die `.gitconfig im aktuellen Kundenordner“ ist nicht möglich
- ein zentraler Verteiler (
work/.gitconfig) ist technisch unvermeidlich - der einheitliche Dateiname
.gitconfigist jedoch problemlos möglich
Hinweise & Best Practices
- Für jede Identität empfiehlt sich ein eigener SSH‑Key
- Optional: Commit‑Signing (GPG oder SSH) pro Identität
- Die hier gezeigte Lösung ist robuster als
git config --local, da sie automatisch greift
Quellen
Text und Inhalt entstanden mit freundlicher Unterstützung von
Compufreak345