© StonePictures/Shutterstock.com
Tipps und Tricks für den Git-Alltag

Pimp my Git


In diesem Artikel werden Tipps und Tricks für Git anhand von Alltagssituationen vorgestellt. Die Autorin arbeitet mit Git am liebsten über einen Mix aus grafischen Werkzeugen und der Kommandozeile. Auch wenn im Artikel vieles mit der Nutzung der Kommandozeile vorgestellt wird, helfen einige Tipps auch, wenn die Entwicklerin ausschließlich mit einem grafischen Werkzeug arbeitet.

Im Beraterinnenalltag kommt es öfters vor, dass an verschiedenen Projekten gleichzeitig gearbeitet wird, die in verschiedenen Git-Management-Systemen liegen. Auch wenn die Entwicklerin keine Beraterin ist, kann sie mit dieser Situation konfrontiert werden, etwa wenn die Firma mitten in einer Migration der Git-Management-Systeme steckt und somit die Projekte auf verschiedenen solcher Systeme liegen, oder wenn die Entwicklerin Pull Requests auf GitHub erstellen möchte. Spätestens dann muss sie mit zwei Git-Identitäten und deren Anmeldedaten lokal umgehen können.

Als Erstes konfiguriert die Entwicklerin die Anmeldedaten für die Authentifizierung bei den verschiedenen Git-Management-Systemen. Natürlich kann sie die Authentifizierungen via Passwortmanager verwalten. Doch es bleibt umständlich, sich regelmäßig mit Benutzername und Passwort anzumelden. Alle gängigen Git-Management-Systeme bieten die Möglichkeit, sich über einen SSH-Schlüssel zu authentifizieren, und SSH kann so konfiguriert werden, dass es selbst erkennt, welchen Schlüssel es gerade benutzen soll.

Als Beispiel dienen zwei Git-Projekte, die auf zwei verschiedenen Git-Management-Systemen liegen. Die Git-Management-Systeme sind unter zwei verschiedenen Domänen erreichbar, example1.com und exam-ple2.com. Für jedes Git-Management-System generiert die Entwicklerin, wie in Listing 1 gezeigt, jeweils ein Public/Private-SSH-Schlüssel-Paar (id_example1 und id_example2).

Listing 1

$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/sparsick/.ssh/id_rsa): /home/sparsick/.ssh/id_example1 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/sparsick/.ssh/id_example1. Your public key has been saved in /home/sparsick/.ssh/id_example1.pub. The key fingerprint is: SHA256:9XVMIDlWX/6OvAzVmqKUBm8pmNNoiFkjJZ/+RERhp/A sparsick@sparsick-ThinkPad-T460s The keys randomart image is: +---[RSA 2048]----+ | . +.. .oo.o| | = o +. =.| | . . E .. .. =| | + o . . . o.| | . = . S . . o| | * + = o o o = | | o o B o B o = .| | + . = . + . | | . . o | +----[SHA256]-----+

Der private Schlüssel liegt dann in der Datei id_example1 und der öffentliche Schlüssel in der Datei id_example1.pub. Diese Prozedur wiederholt die Entwicklerin für id_example2. Diesen öffentlichen Schlüssel muss sie anschließend im jeweiligen Git-Management-System hinterlegen, damit die Authentifizierung via SSH funktionieren kann.

Als Nächstes trägt die Entwicklerin in der SSH-Konfiguration ein, bei welcher Domäne welcher Schlüssel benutzt werden soll. Dafür erstellt sie, wenn nicht vorhanden, eine Datei config unter ~/.ssh und trägt darin ein, für welche Domäne welcher Schlüssel gilt (Listing 2).

Listing 2

config Host example1.com HostName example1.com User git IdentityFile ~/.ssh/id_example1 Host example2.com HostName example2.com User git IdentityFile ~/.ssh/id_example2

Im Anschluss daran kann sie die Git-Repositorys klonen und pushen – ohne Eingabe der jeweiligen Anmeldedaten. Als Nächstes muss die Entwicklerin die Git-Identitäten konfigurieren. Mit Git-Identität sind dabei der Benutzername und die E-Mail-Adresse gemeint, die bei jedem Commit als Autor und Committer eingetragen werden. Der Benutzername und die E-Mail-Adresse können sich von Projekt zu Projekt unterscheiden. Eine herkömmliche Methode sieht folgendermaßen aus:

$ git clone git-repo $ cd git-repo $ git config user.name "Sandra Parsick" $ git config user.email "sparsick@example1.com"

Diese Methode ist recht fehleranfällig, da die Anpassung der Userkonfiguration gerne vergessen wird. Dank des Git-Features Conditional Includes (verfügbar ab Git Version 2.13) lassen sich verschiedene Git-Identitäten pro Verzeichnispfad konfigurieren.

Die Idee von Conditional Includes ist, dass allgemein eine Default-Git-Konfiguration und seperate Git-Konfigurationen pro Verzeichnispfad definiert werden können. In diesen Git-Konfigurationen können der Autorname und die entsprechende E-Mail-Adresse hinterlegt werden. Das bedeutet, dass jedes Repository, das in einem der definierten Verzeichnispfade geklont wird, automatisch die Git-Identität erhält, die für dieses Verzeichnis definiert wurde. Dafür muss parallel zur Git-Konfigurationsdatei .gitconfig eine weitere Git-Konfigurationsdatei für jede Git-Identität angelegt werden.

$ touch ~/.gitconfig_example1 $ touch ~/.gitconfig_example2

Darin werden die jeweiligen Git-Konfigurationen eingetragen:

[user] name = YourNameForExample1 email = name@example1.com

Danach muss in .gitconfig noch definiert werden, für welches Verzeichnis welche Git-Konfiguration angewandt werden soll (Listing 3).

Listing 3

[user] name = defaultName email = default@email.com [includeIf "gitdir:~/workspace_example1/"] path = .gitconfig_example1 [includeIf "gitdir:~/workspace_ex...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang