Wie konfigurieren und verwenden Git-Core-Entwickler Git?
(blog.gitbutler.com)- Scott Chacon, Autor von "Pro Git", erklärt einige Git-Einstellungen, die er global aktiviert hat, und warum
- Viele dieser Einstellungen hat er tatsächlich von Entwicklern übernommen, die an der Git-Core-Codebasis arbeiten
- Unten stehen
~/.gitconfig-Einstellungen, die Git besser machen[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # Warum eigentlich nicht? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # Einstellungen nach persönlichem Geschmack (bei Bedarf auskommentieren und verwenden) [core] # fsmonitor = true # untrackedCache = true [merge] # (bei Git-Versionen kleiner als 2.3 `diff3` verwenden) # conflictstyle = zdiff3 [pull] # rebase = true
Wie konfigurieren Git-Core-Entwickler Git?
- In der Git-Mailingliste hatte Felipe Contreras dem Core-Team einmal vorgeschlagen, alle Einstellungen und Aliasse zu entfernen und Git in der Standardkonfiguration zu verwenden
- Als Ergebnis dieses Experiments wurden 9 Einstellungen und 3 Aliasse als neue Standardwerte vorgeschlagen
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - Diese Einstellungen wurden noch nicht als Standardwerte übernommen
- Interessant ist aber, dass viele Git-Entwickler Git nur schwer nutzen können, wenn einige davon nicht aktiviert sind
- Noch interessanter ist, dass die meisten von euch vermutlich gar nicht wissen, was das alles bedeutet
- Die Erklärung ist in drei Kategorien aufgeteilt
- Was Git eindeutig besser macht (Clearly Makes Git Better)
- Warum zur Hölle nicht? (Why the Hell Not?)
- Geschmackssache (A Matter of Taste)
# Was Git eindeutig besser macht
Branch-Liste sortieren
- Standardmäßig sortiert Git Branches alphabetisch, aber eine Sortierung nach dem Datum des letzten Commits kann nützlicher sein
- Mit den folgenden Einstellungen werden Branches nach dem jüngsten Commit sortiert und in Spalten dargestellt
git config --global column.ui auto git config --global branch.sort -committerdate
Tag-Liste sortieren
- Um Tags nicht alphabetisch, sondern nach Version zu sortieren, verwende die folgende Einstellung
git config --global tag.sort version:refname
Standard-Branch-Namen festlegen
- Um beim Initialisieren neuer Repositories den Standard-Branch-Namen festzulegen, verwende
git config --global init.defaultBranch main
Verbesserte diff-Einstellungen
- Der Standard-diff-Algorithmus wird auf
histogramgeändert, um präzisere Vergleiche zu ermöglichen - Um Codeverschiebungen zu erkennen und farblich hervorzuheben, füge folgende Einstellungen hinzu
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
Verbesserte push-Einstellungen
- Mit den folgenden Einstellungen lässt sich das Verhalten von push verbessern
git config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
Verbesserte fetch-Einstellungen
- Um beim fetch unnötige Branches und Tags automatisch zu entfernen, verwende folgende Einstellungen
git config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# Warum eigentlich nicht?
Autokorrektur mit Rückfrage
- Um Tippfehler bei der Eingabe von Befehlen zu erkennen und Vorschläge zu machen, verwende
git config --global help.autocorrect prompt
diff beim Committen
- Um beim Schreiben der Commit-Nachricht auch die Änderungen anzuzeigen, füge folgende Einstellung hinzu
git config --global commit.verbose true
Konfliktauflösungen wiederverwenden
- Um frühere Konfliktauflösungen automatisch wiederzuverwenden, verwende folgende Einstellungen
git config --global rerere.enabled true git config --global rerere.autoupdate true
Globale .gitignore-Datei festlegen
- Um Dateien festzulegen, die global ignoriert werden sollen, verwende
git config --global core.excludesfile ~/.gitignore
Rebase-Einstellungen verbessern
- Um bei einem Rebase automatisch Squash und Stash zu verwenden, nutze folgende Einstellungen
git config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# Geschmackssache
Verbesserte Anzeige von Merge-Konflikten
- Um bei Merge-Konflikten zusätzlich die gemeinsame Basisversion anzuzeigen, ziehe folgende Einstellung in Betracht
git config --global merge.conflictstyle zdiff3
Rebase bei pull verwenden
- Um bei
git pullautomatisch ein Rebase auszuführen, verwendegit config --global pull.rebase true
Erkennung von Dateiveränderungen beschleunigen
- Um die Performance von
git statusund ähnlichen Befehlen zu verbessern, kannst du folgende Einstellungen verwendengit config --global core.fsmonitor true git config --global core.untrackedCache true
# Fazit
- Mit diesen Einstellungen lässt sich Git komfortabler nutzen, und einige davon werden auch von Core-Entwicklern aktiv verwendet
- Durch die Optimierung der Git-Konfiguration lassen sich Arbeitsabläufe verbessern und Git effizienter einsetzen
7 Kommentare
„Noch interessanter ist, dass die meisten von euch überhaupt nicht wissen, was das bedeutet“ – das trifft einen Nerv. 😱
Ist es nicht
--global, sondern-global?--globalist richtig. Beim Kopieren und Einfügen ist mir ein Fehler unterlaufen. Das wurde korrigiert.Beliebte Git-Konfigurationsoptionen
Die Wiederverwendung der Konfliktlösung ist gut.
Ich nutze beim Diffen
git-delta, um es im TUI-Format anzusehen.Wenn mir das alles zu lästig ist, dann eben
tig... hahahaGibt es vielleicht noch etwas Besseres...?
Hacker-News-Kommentare
git out. Es listet alle Commits auf, die noch nicht gepusht wurden. Ich verwende es ständiggit config --global core.pager batcatmit Syntax-Highlighting