Wer kennt es nicht? Als Consultant arbeitet man für verschiedene Kunden, hat unterschiedliche Projekte am Laufen und muss ständig zwischen verschiedenen Codebasen jonglieren. Git ist dabei unser treuer Begleiter, aber mal ehrlich – nutzen wir wirklich sein volles Potenzial?
In diesem Blogpost möchte ich dir ein paar ausgefallenere Git-Features zeigen, die mir im Consulting-Alltag das Leben deutlich leichter machen. Kein trockenes Handbuch-Zeug, versprochen! Nur praktische Tipps, die dir Zeit sparen und Kopfschmerzen ersparen werden.
Unterschiedliche gitconfig für unterschiedliche Kunden
Auch das kennt man: Montags committest du für Kunde A mit deiner Firmen-E-Mail, dienstags für Kunde B mit einer projektspezifischen Adresse, und am Freitag versehentlich mit der falschen E-Mail für den falschen Kunden? Mega nervig.
Die Lösung: includeIf
in deiner Git-Konfiguration. Damit kannst du kundenspezifische Git-Einstellungen definieren, die automatisch aktiviert werden, je nachdem, in welchem Verzeichnis du arbeitest.
So könnte deine .gitconfig
aussehen:
[user] name = Max Mustermann email = max.mustermann@meine-firma.de [includeIf "gitdir:~/projekte/kunde-a/"] path = ~/.gitconfig-kunde-a [includeIf "gitdir:~/projekte/kunde-b/"] path = ~/.gitconfig-kunde-b
Und in .gitconfig-kunde-a
:
[user] email = max.mustermann@kunde-a.de
Schon ist Schluss mit den falschen E-Mail-Adressen. Du kannst dort natürlich auch andere Git-Settings wie Signing-Keys oder spezielle Aliase definieren.
Git Worktree
Manchmal möchte man parallel an mehreren Branches arbeiten, ohne ständig zwischen ihnen hin und her zu wechseln. Genau dafür gibt’s Git Worktree.
Kurze Unterbrechung
DAS IST DEIN ALLTAG?
Keine Sorge – Hilfe ist nah! Melde Dich unverbindlich bei uns und wir schauen uns gemeinsam an, ob und wie wir Dich unterstützen können.
Stell dir folgendes vor: Du arbeitest an einem Feature und plötzlich kommt ein dringender Bugfix rein. Normalerweise würdest du deinen aktuellen Stand committen oder stashen, den Branch wechseln, und später wieder zurückkehren. Mit Worktree geht das wesentlich eleganter:
# Erstellt einen neuen Worktree für den Bugfix git worktree add ../projekt-bugfix bugfix-branch # Im neuen Verzeichnis arbeiten cd ../projekt-bugfix # ... Bugfix implementieren und committen ... # Zurück zum Hauptprojekt cd ../hauptprojekt # Wenn fertig, Worktree entfernen git worktree remove ../projekt-bugfix
Super praktisch ist das auch für:
- Code-Reviews durchführen, während du weiter an eurem Feature arbeitest
- Verschiedene Versionen deiner App parallel laufen lassen, um Funktionen zu vergleichen
- Schnelles Testen von PRs, ohne den aktuellen Arbeitsstand zu verlieren
Git Sparse-Checkout
Monorepos sind toll für Kunden, aber manchmal der Horror für uns Consultants. Wenn du nur an einem kleinen Teil eines riesigen Repos arbeitest, warum das ganze Ding runterladen?
Mit Sparse-Checkout kannst du selektiv nur die Teile auschecken, die du wirklich brauchst:
# Repo initialisieren, aber noch keine Dateien auschecken git clone --filter=blob:none --no-checkout <https://github.com/kunde/monorepo.git> cd monorepo # Nur die benötigten Verzeichnisse auschecken git sparse-checkout set frontend/mein-modul config/shared # Jetzt normal arbeiten git checkout main
Das spart nicht nur Speicherplatz, sondern macht auch Git-Operationen schneller, weil weniger Dateien verarbeitet werden müssen.
Git Notes
Wolltest du schon einmal Commits nachträglich mit Infos versehen, ohne sie zu ändern. Vielleicht Hinweise für Kollegen, Referenzen zu Tickets oder Notizen zur Implementierung.
Git Notes sind dafür perfekt:
# Note zu einem Commit hinzufügen git notes add -m "Achtung: Dieser Fix funktioniert nur mit DB-Version 5.7+" a1b2c3d4 # Notes anzeigen git log --show-notes # Notes mit dem Remote teilen git push origin refs/notes/*
Besonders cool dabei: Die Notes verändern den Commit-Hash nicht, du kannst also nachträglich Informationen ergänzen, ohne die Git-Historie zu verfälschen.
Git Commit Signieren mittels SSH Key
GPG-Keys zum Signieren von Commits sind super, aber ehrlich gesagt manchmal ein Krampf in der Einrichtung. Die gute Nachricht: Du kannst jetzt auch mit deinem SSH-Key signieren, den du wahrscheinlich sowieso schon nutzt.
# In deiner .gitconfig [user] signingkey = ~/.ssh/id_ed25519.pub [gpg] format = ssh [commit] gpgsign = true
Wenn du deinen SSH-Key bei GitHub oder GitLab hinterlegt hast, werden deine Commits automatisch als verifiziert angezeigt. Kein GPG-Gedöns mehr!
Hier auch wieder der Hinweis auf includeIf
, um getrennte Signierschlüssel je Kunde zu haben
Binär-Dateien Diffen
Wir alle wissen, dass Binärdateien in Git ein Albtraum sein können. Aber manchmal lässt es sich nicht vermeiden, Excel-Dateien, PDFs oder andere Binaries ins Repo zu packen.
Git erlaubt dir, externe Diff-Tools für bestimmte Dateitypen zu konfigurieren:
# In .gitconfig oder .git/config [diff "excel"] textconv = sh -c 'xlsx2csv -a "$0"' # -a parameter ist hier, um alle Sheets zu exportieren binary = true
Und in .gitattributes
:
*.xlsx diff=excel
Jetzt kannst du mit git diff
tatsächlich sehen, was sich in deinen Excel-Dateien geändert hat. Für xlsx2csv musst du lediglich das entsprechende Tool installieren (pip install xlsx2csv
).
Ähnlich funktioniert das bei PDFs mit pdftotext
, bei Bildern mit exiftool
– und es gibt Lösungen für viele andere Formate.
Die .gitattributes
-Datei ist Repo-spezifisch, du kannst dir aber auch eine Globale Datei in der ~/.gitconfig
definieren:
[core] attributesfile = /home/user/.gitattributes
Git Convenience
Zum Schluss noch ein paar schnelle Tipps, die deinen Git-Workflow auf das nächste Level heben:
Word-Diff für detaillierte Textänderungen
git diff --word-diff
Zeigt Änderungen auf Wortebene statt Zeilenebene an.
Bessere Diff-Algorithmen
[diff] algorithm = histogram
Der Histogram-Algorithmus erkennt Strukturen besser und liefert oft sinnvollere Diffs. Es ist der neuste Diff Algorithmus in Git.
Autostash
[rebase] autostash = true
Stashed automatisch deine Änderungen vor einem Rebase und wendet sie danach wieder an.
Branches nach Commit-Datum sortieren
[branch] sort = -committerdate
Zeigt die zuletzt bearbeiteten Branches zuerst an.
Branches automatisch in Spalten anzeigen
[column] ui = auto
Übersichtlicher, vor allem bei vielen Branches.
Branches ohne Mehraufwand pushen
[push] autoSetupRemote = true
Kein --set-upstream
mehr nötig beim ersten Push eines neuen Branches.
Tags besser sortieren
[tag] sort = version:refname
Sortiert Tags semantisch (v1.10 kommt nach v1.9, nicht davor).
Autocorrect für Tippfehler
[help] autocorrect = prompt
Git schlägt Korrekturen vor, wenn du dich vertippst.
Automatisches Aufräumen
[fetch] prune = true pruneTags = true
Entfernt automatisch Referenzen zu gelöschten Remote-Branches und Tags.
Rerere-Feature aktivieren
[rerere] enabled = true
Git „erinnert“ sich an frühere Konfliktlösungen und wendet sie automatisch an.
Verbose Commits
[commit] verbose = true
Zeigt den Diff im Commit-Editor an, nicht nur die Statusliste.
Git Pull mit Rebase
[pull] rebase = true
Verwendet Rebase statt Merge beim Pullen, für eine sauberere Historie. Hier vor allem im Zusammenhang mit Autostashing sehr hilfreich.
Zusammenfassung
So, das waren meine liebsten Git-Tricks für den Consulting-Alltag. Mit diesen Tools im Gepäck kannst du flexibler zwischen Projekten wechseln, effizienter arbeiten und weniger Zeit mit Git-Problemen verschwenden.
Allerdings ist mir klar, dass ich nicht alles kennen kann … hast du noch andere coole Git-Features, die dir das Leben leichter machen? Lasst es mich in den Kommentaren wissen!
Für alle, die noch tiefer einsteigen wollen, kann ich folgende Ressourcen empfehlen:
- Pro Git Book – kostenlos und umfassend
- Git Flight Rules – Problemlösungen für typische Git-Situationen
- Oh Shit, Git!?! – Wenn mal was schiefgeht (und keine Sorge, das wird es!)
Happy Coding und bis zum nächsten Mal!
Kurze Unterbrechung
DAS IST DEIN ALLTAG?
Keine Sorge – Hilfe ist nah! Melde Dich unverbindlich bei uns und wir schauen uns gemeinsam an, ob und wie wir Dich unterstützen können.
Schreibe einen Kommentar