2.7 git (Q4 2015) einführen wird Zweig mit Sortierung direkt git branch
:
Siehe begehen aa3bc55 , begehen aedcb7d , begehen 1511b22 , begehen f65f139 , ... (23. September 2015), verpflichten aedcb7d , begehen 1511b22 , begehen ca41799 (24. September 2015) und Commit f65f139 , ... (23. September 2015) von Karthik Nayak ( KarthikNayak
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 7f11b48 , 15. Oktober 2015)
Legen Sie insbesondere aedcb7d fest :
branch.c
: Verwenden Sie ' ref-filter
' APIs
Make ‚ branch.c
‘ Nutzung ‚ ref-filter
‘ APIs für das Iterieren durch Sortierung Refs. Dadurch wird der größte Teil des Codes entfernt, der beim branch.c
Ersetzen durch Aufrufe der ref-filter
Bibliothek verwendet wird.
Es fügt die Option hinzu--sort=<key>
:
Sortieren Sie nach dem angegebenen Schlüssel.
Präfix -
zum Sortieren in absteigender Reihenfolge des Werts.
Sie können die --sort=<key>
Option mehrmals verwenden. In diesem Fall wird der letzte Schlüssel zum Primärschlüssel.
Die unterstützten Schlüssel sind die gleichen wie ingit for-each-ref
.
Die Sortierreihenfolge erfolgt standardmäßig nach dem vollständigen Referenznamen (einschließlich refs/...
Präfix). Hier werden zuerst der getrennte HEAD (falls vorhanden), dann die lokalen Zweige und schließlich die Fernverfolgungszweige aufgelistet.
Hier:
git branch --sort=-committerdate
Oder (siehe unten mit Git 2.19)
# if you are sure to /always/ want to see branches ordered by commits:
git config --global branch.sort -committerdate
git branch
Siehe auch Commit 9e46833 (30. Oktober 2015) von Karthik Nayak ( KarthikNayak
) .
Mit freundlichergitster
Unterstützung von Junio C Hamano ( ) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 415095f , 3. November 2015)
Beim Sortieren nach numerischen Werten (z. B. --sort=objectsize
) gibt es keinen Fallback-Vergleich, wenn beide Refs den gleichen Wert haben. Dies kann zu unerwarteten Ergebnissen führen (dh die Reihenfolge der Auflistung von Refs mit gleichen Werten kann nicht vorbestimmt werden), wie von Johannes Sixt ( $ gmane / 280117 ) ausgeführt.
Daher wird auf den alphabetischen Vergleich basierend auf dem Referenznamen zurückgegriffen, wenn das andere Kriterium gleich ist .
$ git branch --sort=objectsize
* (HEAD detached from fromtag)
branch-two
branch-one
master
Mit Git 2.19 kann die Sortierreihenfolge standardmäßig festgelegt werden.
git branch
unterstützt eine Konfiguration branch.sort
wie git tag
, die bereits eine Konfiguration hatte tag.sort
.
Siehe Commit 560ae1c (16. August 2018) von Samuel Maftoul (``) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit d89db6f , 27. August 2018)
branch.sort:
Diese Variable steuert die Sortierreihenfolge der Zweige, wenn sie von angezeigt wird git-branch
.
Ohne die --sort=<value>
Option " " wird der Wert dieser Variablen als Standard verwendet.
Verwenden Sie zum Auflisten entfernter Zweige git branch -r --sort=objectsize
. Das -r
Flag bewirkt, dass entfernte Zweige anstelle lokaler Zweige aufgelistet werden.
Mit Git 2.27 (Q2 2020) akzeptierten " git branch
" und andere " for-each-ref
" Varianten mehrere --sort=<key>
Optionen in aufsteigender Rangfolge, es gab jedoch einige --ignore-case
Fehler bei der Handhabung und beim Brechen des Referenznamens, die behoben wurden.
Siehe Commit 7c5045f , Commit 76f9e56 (03. Mai 2020) von Jeff King ( peff
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit 6de1630 , 08. Mai 2020)
ref-filter
: Fallback-Refname-Sortierung erst nach allen Benutzersortierungen anwenden
Unterzeichnet von: Jeff King
Commit 9e468334b4 (" ref-filter
: Fallback beim alphabetischen Vergleich", 30.10.2015, Git v2.7.0-rc0 - Zusammenführung in Stapel 10 aufgeführt ) hat die Sortierung des Ref-Filters zum Fallback zum Vergleichen von Refnames gelehrt.
Aber es hat es auf der falschen Ebene gemacht und das Vergleichsergebnis für einen einzelnen " --sort
" Schlüssel des Benutzers überschrieben , anstatt nachdem alle Sortierschlüssel erschöpft waren.
Dies funktionierte korrekt für eine einzelne " --sort
" Option, jedoch nicht für mehrere.
Wir würden alle Verbindungen im ersten Schlüssel mit dem Referenznamen aufheben und den zweiten Schlüssel überhaupt nicht bewerten.
Um die Sache noch interessanter zu machen, haben wir diesen Fallback nur manchmal angewendet!
Für ein Feld wie " taggeremail
", für das ein Zeichenfolgenvergleich erforderlich ist, würden wir das Ergebnis von wirklich zurückgeben strcmp()
, selbst wenn es 0 wäre.
Für numerische " value
" Felder wie " taggerdate
" haben wir jedoch den Fallback angewendet. Und deshalb hat unser Mehrfachsortiertest dies übersehen: Er dient taggeremail
als Hauptvergleich.
Beginnen wir also mit einem viel strengeren Test. Wir haben eine Reihe von Commits, die jede Kombination von zwei Tagger-E-Mails, Daten und Refnames ausdrücken. Dann können wir bestätigen, dass unsere Sortierung mit der richtigen Priorität angewendet wird, und wir werden sowohl den String- als auch den Wertekomparator treffen.
Das zeigt den Fehler, und die Behebung ist einfach: Verschieben Sie den Fallback auf die äußere compare_refs()
Funktion, nachdem alle ref_sorting
Tasten erschöpft sind.
Beachten Sie, dass wir in der äußeren Funktion kein "ignore_case"
Flag haben, da es Teil jedes einzelnen ref_sorting
Elements ist. Es ist fraglich, was ein solcher Fallback bewirken sollte, da wir die Schlüssel des Benutzers nicht für die Übereinstimmung verwendet haben.
Aber bis jetzt haben wir versucht, diese Flagge zu respektieren. Das am wenigsten invasive ist, zu versuchen, dies auch weiterhin zu tun.
Da alle Anrufer im aktuellen Code entweder das Flag für alle Schlüssel oder für keine setzen, können wir das Flag einfach von der ersten Taste ziehen. In einer hypothetischen Welt, in der der Benutzer die Groß- und Kleinschreibung von Schlüsseln wirklich separat umdrehen kann, möchten wir möglicherweise den Code erweitern, um diesen Fall von einer Decke " --ignore-case
" zu unterscheiden.