Ein Freund hat mir heute seine .gitconfig gezeigt, die eine Funktion hatte, die mich umgehauen hat!

Abhängig von der URL seines Git-Repository werden der Benutzername und die E-Mail automatisch gesetzt. Das ist sehr praktisch in Unternehmen, wenn man sowohl interne Git-Repos als auch GitHub-Repos hat, da Dinge wie Namen normalerweise unterschiedlich sind, oder wenn die Hochschule eine GitLab-Instanz für Projekte hat, man aber auch einen GitHub-Account für persönliche Repositories hat.

Ich habe normalerweise die folgenden Befehle für alle Repos ausgeführt, die nicht auf GitHub waren:

git config --local user.email "different@mail.example.com"
git config --local user.name "Different Name"

So funktioniert’s

Zunächst einmal müssen wir Konfigurationsdateien erstellen, die nur die Remote-spezifischen Einstellungen enthalten. Ich habe meine in .config/git/ erstellt, aber dazu kann man jeden beliebigen Ort wählen. Meine GitHub-Konfiguration sieht wie folgt aus:

[user]
        name = hoppjan
        email = 83405332+hoppjan@users.noreply.github.com

Das kann man für alle Konten oder Identitäten wiederholen.

Die Remote-spezifischen Dateien geben wir jetzt, in der ~/.gitconfig an:

[includeIf "hasconfig:remote.*.url:*github.com*/**"]
        path = .config/git/config_github

Man kann das URL-Muster natürlich anpassen. Ein Beispiel: Früher habe ich HTTPS-Remotes verwendet, aber heute benutze ich meistens SSH-Remotes. Deshalb habe ich https:// vor der URL weggelassen, aber wenn man nie SSH verwendet, könnte man es hinzufügen.

Andere Bedinungen

Wenn man seine Repos je nach Identität oder Remote in Ordnern aufgeteilt hat, kann man auch andere Bedingungen setzen:

[includeIf "gitdir:~/Projects/personal/"]
...
[includeIf "gitdir:~/Projects/work/"]
...

Was leider nicht geht

Nachdem ich alles zum Laufen gebracht hatte, habe ich mich gefragt, ob ich den Inhalt meiner Konfigurationsdateien direkt in die ~/.gitconfig-Datei schreiben könnte. Leider scheint dies nicht der Fall zu sein. Das Folgende hat nämlich nicht funktioniert:

[includeIf "hasconfig:remote.*.url:*github.com*/**"]
 user.name = hoppjan
 user.email = 83405332+hoppjan@users.noreply.github.com

Ich denke zwar, dass das eine tolle Verbesserung wäre, aber eigentlich es bietet wenig praktischen Nutzen. Da includeIf ähnlich wie include zu funktionieren scheint, mit dem man andere Dateien in seine Git-Konfiguration einbinden kann, bezweifle ich, dass so ein Feature jemals zu Git hinzugefügt wird.

Dank und Quellen