Developer Hacks – Moderne Command Line Tools und Advanced Git Commands
Die Arbeit mit dem Terminal und mit Git gehört zu den grundlegenden Techniken für Developer. Dieser Artikel stellt ein modernes Terminal-Setup, moderne Alternativen zu klassischen Shell-Programmen und fortgeschrittene Git-Befehle vor. Die Verwendung dieser Werkzeuge hilft dabei, sich in Projekten einfacher und schneller zu orientieren, um sich auf das zu konzentrieren, was wirklich wichtig ist: großartige Software zu entwickeln.
Für Mac-Benutzer bietet iTerm2 mehr Funktionen als das Standard-Mac-Terminal: geteilte Fenster, Hotkey-Fenster und umfangreiche Konfigurationsmöglichkeiten. Ich verwende es mit dem Catppuccin-Macchiato-Farbdesign und mag vor allem die Funktion, dass ein Scratchpad-Terminal per Hotkey schnell verfügbar ist:
Weitere nützliche Tools sind Rectangle für die Anordnung von Fenstern, Alt-Tab für den Fensterwechsel und Maccy für den Verlauf der Zwischenablage.
Zsh, eine der beliebtesten Shells und die Standard-Shell auf Mac, kann mit oh-my-zsh angepasst werden, einem Framework, das die Verwaltung von zsh-Konfigurationen vereinfacht. Es wird oft zusammen mit der powerlevel10k-Prompt verwendet, um eine ansprechende und hilfreiche Terminal-Prompt zu erhalten. Zusätzlich kann die User Experience mit Plugins wie zsh-autosuggestions oder zsh-syntax-highlighting verbessert werden.
Neuere, aber weniger verbreitete Shells sind nushell, fish und xonsh. Ich finde xonsh besonders interessant, weil man damit sowohl Python- als auch Shell-Befehle nutzen kann.
Für viele der traditionellen Befehle wie ls, cat, find usw. gibt es moderne Alternativen. Im Vergleich zu den klassischen Gegenstücken sind diese Shell-Befehle oft schneller (da sie häufig in Rust geschrieben sind), haben farbige Hervorhebungen und sind im moderneren Entwicklungsumfeld praktischer, z. B. durch die Berücksichtigung von gitignore-Dateien.
eza und lsd bieten beide eine bessere Dateiliste mit farblicher Hervorhebung, Symbolen und zusätzlichen Konfigurationsmöglichkeiten.
Bat ist ein Textbetrachter, der Zeilennummern, Syntaxhervorhebung und Git-Änderungen verwendet. Das Programm verwendet Paging für längere Ausgaben (scrollt den Text wie less), produziert aber unformatierte Ausgaben, wenn es für Befehls-Verknüpfungen („Piping“) verwendet wird.
Für die Anzeige von Datei- und Ordnergrößen bietet dust eine besser sortierte und visualisierte Ausgabe im Vergleich zu du:
fd ist eine moderne Alternative zu find, um nach Dateien zu suchen, deutlich schneller und mit einer einfacheren Syntax: fd PATTERN anstelle von find -iname '*PATTERN*'.
Ein Werkzeug zum Suchen von Text in Dateien. Mit vernünftigen Standardeinstellungen berücksichtigt ripgrep die gitignore-Regeln und ignoriert versteckte und binäre Dateien. Deutlich schneller als das originale grep.
sed wird in der Regel zum Ersetzen von Text verwendet. sd erledigt dies mit einer einfacheren Syntax:
Für das klassische htop-Tool zur Überprüfung des Systemstatus gibt es moderne Alternativen wie z.B. bottom, glances oder btop(es gibt sogar noch mehr). Obwohl sie größtenteils dieselben Systemmetriken verwenden, unterscheiden sie sich in ihrer Anpassbarkeit und der Art und Weise, wie sie Daten anzeigen und visualisieren:
fzf durchsucht Text mit einer sogenannten unscharfen Suche: Es findet auch leicht abweichende Schreibweisen, bei denen Zeichen weggelassen werden. Mit dem fzf-zsh-plugin kann man automatisch die Befehlshistorie mit fzf durchsuchen, wenn man ^R drückt.
The Fuck korrigiert automatisch Tippfehler in Konsolenbefehlen. Anstatt zurückzugehen und einen Tippfehler manuell zu korrigieren, gibt man einfach fuck ein und es wird der richtige Befehl vorgeschlagen (den man sofort ausführen kann):
Neben den Standard-Befehlen – git init, clone, git pull, add, commit, git push, diff oder show – gibt es einige Git-Funktionen, die einem in vielen Situationen das Leben erleichtern. Hier ist ein Überblick über diese hilfreichen Funktionen:
Einige hilfreiche Optionen sind (werden mit git config -global gesetzt):
Die Ausgabe von git log kann mit git log --pretty=oneline verkürzt und mit benutzerdefinierter Formatierung ansprechender gemacht werden, z. B. (Quelle):
git log --graph --pretty=format:'%Cred%h%Creset -%C(gelb)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
Für diesen Befehl kann auch ein Alias gesetzt werden, via git config --global alias.logline „log -graph ...“
Git's interaktiver Rebase kann verwendet werden, um die Commit-Historie zu bearbeiten, indem man Commits kombiniert, Commit-Messages bearbeitet oder einige von ihnen verwirft. Das ist praktisch, wenn man z.B. einen Feature-Branch vor dem Mergen aufräumen will. git rebase -i öffnet eine Liste von Commits in einem Editor, wo man den Standardbefehl „pick“ in einen passenden Befehl ändern kann. Eine detaillierte Beschreibung gibt es hier.
Stell dir folgendes Szenario vor: Der Code funktioniert nicht richtig, aber man kommt nicht drauf, woran es liegt. Vor einer Woche lief noch alles einwandfrei.
Git bisect kann helfen, den genauen Commit zu bestimmen, an dem ein Fehler eingeführt wurde. Man führt git bisect start aus und markiert die guten und schlechten Commits (mit git bisect good / git bisect bad <hash>), d.h. die Commits von denen man weiß dass der Code funktioniert bzw nicht funktioniert. Git wechselt dann automatisch zu dem Commit in der Mitte. Man kann ihn als gut oder schlecht markieren und Git wechselt dann wieder zum Commit in der Mitte zwischen den guten und schlechten Commits. Dieser Vorgang wird wiederholt, bis der schuldige Commit gefunden wurde.
Versehentlich wurde ein Branch gelöscht oder ein Commit verloren? Keine Sorge, die sind noch in Git vorhanden! Man kann git reflog verwenden, um eine Liste der vorherigen Commits/Branches, an denen man gearbeitet hat, zu erhalten und den Hash des gelöschten Objekts zu finden (um es mit git checkout wiederherzustellen):
Angenommen, man arbeiten an einem neuen Feature und hat viele bearbeitete oder neue Dateien. Plötzlich muss man etwas Dringliches auf dem Main-Branch fixen. Normalerweise würden man entweder die Änderungen committen und in den Main-Branch wechseln oder eine neue Kopie des gesamten Repositories in einem neuen Verzeichnis erstellen, um einen sauberen Zustand zu haben.
Mit git worktree kann man einen weiteren Worktree erstellen, so etwas wie „eine Kopie des Repositories innerhalb des Repositoriess“, die man löschen kann, nachdem man Änderungen vorgenommen hat:
git worktree add ./fix-critical-bug main
# Wechseln in das Verzeichnis „fix-critical-bug“, Bug fixen und Commit auf Main-Branch pushen
git worktree remove ./fix-critical-bug
# zurück zur Arbeit am neuen Feature
Zusammenfassend lässt sich sagen, dass man durch die Integration dieser modernen Befehlszeilentools und fortgeschrittenen Git-Befehle im Arbeitsablauf die Produktivität steigern und effizienter Software mit echtem Business-Value entwickeln kann.
Möchtest du Teil des Teams werden?
We have received your feedback.