Ich muss alte und nicht gepflegte Zweige aus unserem Remote-Repository löschen. Ich versuche einen Weg zu finden, wie die Remote-Zweige nach ihrem letzten Änderungsdatum aufgelistet werden können, und ich kann nicht.
Gibt es eine einfache Möglichkeit, Remote-Zweige auf diese Weise aufzulisten?
git
maintenance
administration
branch
Roni Yaniv
quelle
quelle
Antworten:
commandlinefu hat 2 interessante Vorschläge:
oder:
Dies gilt für lokale Zweige in einer Unix-Syntax. Mit
git branch -r
können Sie auf ähnliche Weise entfernte Zweige anzeigen:Michael Forrest erwähnt in den Kommentaren, dass zsh Escapezeichen für den
sed
Ausdruck benötigt:Kontinuität fügt in den Kommentaren hinzu :
In mehreren Zeilen:
Hinweis: Die Antwort von n8tr basiert auf sauberer. Und schneller . Siehe auch " Nur Name Option für ? "
git for-each-ref refs/heads
git branch --list
Im Allgemeinen erinnert uns Tripleee in den Kommentaren :
(Ich habe diesen Punkt 2014 mit " Was ist der Unterschied zwischen
$(command)
und`command`
in der Shell-Programmierung? " Illustriert. )quelle
/json
am Ende einer beliebigen commandlinefu.com- URL hinzufügen können und alle Befehle als JSON erhalten.Folgendes benutze ich:
Dies ist die Ausgabe:
Verwenden Sie für entfernte Zweige einfach "refs / remotes" anstelle von "refs / Heads":
Aufbauend auf der Antwort von n8tr können Sie Folgendes verwenden , wenn Sie auch an dem letzten Autor in der Branche interessiert sind und das Tool "Spalte" zur Verfügung haben:
Welches wird Ihnen geben:
Möglicherweise möchten Sie vorher "git fetch --prune" aufrufen, um die neuesten Informationen zu erhalten.
quelle
authordate
(was scheint zu sein, als der Zweig zum ersten Mal erstellt wurde?). Wenn Sie ändern ,authordate
umcommitterdate
dann in jedem Zweig begehen werden Sie die Daten der jüngsten zu sehen. Wie so:git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
Aufbauend auf Olivier Croquette verwende ich gerne ein relatives Datum und kürze den Filialnamen folgendermaßen :
Welches gibt Ihnen Ausgabe:
Ich empfehle, eine Bash-Datei zu erstellen, um alle Ihre Lieblings-Aliase hinzuzufügen und das Skript dann an Ihr Team weiterzugeben. Hier ist ein Beispiel, um nur dieses hinzuzufügen:
Dann können Sie dies einfach tun, um eine gut formatierte und sortierte lokale Zweigstellenliste zu erhalten:
quelle
Um den Kommentar von @VonC zu ergänzen, nehmen Sie Ihre bevorzugte Lösung und fügen Sie sie der Einfachheit halber Ihrer Alias-Liste ~ / .gitconfig hinzu:
Dann druckt ein einfaches "Git Branchdate" die Liste für Sie ...
quelle
--format='%(authordate)%09%(objectname:short)%09%(refname)'
wodurch auch der kurze Hash jedes Zweigs abgerufen wird .| tac
, nur--sort='authordate'
statt-authordate
Hier ist, was ich mir ausgedacht habe, nachdem ich dies ebenfalls überprüft habe .
Die
PREV_REF
Überprüfung besteht darin, Duplikate zu entfernen, wenn mehr als ein Zweig auf dasselbe Commit verweist. (Wie in einem lokalen Zweig, der auch in der Fernbedienung vorhanden ist.)Beachten Sie, dass gemäß der OP-Anforderung
git branch --merged
undgit branch --no-merged
nützlich sind, um zu identifizieren, welche Zweige leicht gelöscht werden können.[ https://git-scm.com/docs/git-branch]
quelle
Sortierte Remote- Zweige und das letzte Festschreibungsdatum für jeden Zweig.
quelle
Ich habe zwei Varianten gemacht, basierend auf VonCs Antwort .
Meine erste Variante:
Dies behandelt lokale und entfernte Zweige (
-a
), behandelt den Status des getrennten Kopfes (der längere Befehl sed, obwohl die Lösung etwas grob ist - er ersetzt nur die Informationen des getrennten Zweigs durch das Schlüsselwort HEAD), fügt das Festschreibungssubjekt hinzu (% s ) und fügt Dinge über Literal-Pipe-Zeichen in der Formatzeichenfolge in Spalten ein und übergibt das Endergebnis ancolumn -t -s "|"
. (Sie können alles als Trennzeichen verwenden, solange Sie dies im Rest der Ausgabe nicht erwarten.)Meine zweite Variante ist ziemlich hackig, aber ich wollte wirklich etwas, das immer noch einen Indikator für "Dies ist der Zweig, in dem Sie sich gerade befinden" hat, wie es der Befehl branch tut.
Dadurch wird der
*
, der den aktuellen Zweig markiert, in ein Schlüsselwort umgewandelt. Wenn der Schleifenkörper das Schlüsselwort sieht, setzt er stattdessen ein Flag und gibt nichts aus. Das Flag gibt an, dass für die nächste Zeile eine alternative Formatierung verwendet werden soll. Wie ich schon sagte, es ist total hacky, aber es funktioniert! (Meistens. Aus irgendeinem Grund wird meine letzte Spalte in der aktuellen Zweigleitung veraltet.)quelle
git for-each-ref
ist die skriptfreundliche Methode zur Verarbeitung von Zweigen. Sie müssten die symbolische Referenz einmal ausführen, um den aktuellen Zweig zu erhalten.Ich habe einen einfachen Alias erstellt, nicht sicher, ob dies genau gefragt ist, aber es ist einfach
Ich tat dies, weil ich alle Zweige auflisten wollte, nicht nur meine lokalen Zweige, was die obigen Befehle nur tun
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Sie können oben pfeifen
grep origin
, um nur Ursprünge zu erhaltenDies listet alle Zweige zusammen mit dem letzten Änderungsdatum auf und hilft mir bei der Entscheidung, welchen ich für die neueste Version ziehen soll
Dies führt zu der folgenden Art der Anzeige
Versuchen Sie und lassen Sie mich wissen, ob es geholfen hat, fröhliches Gitting
quelle
Oder Sie können mein PHP-Skript https://gist.github.com/2780984 verwenden
quelle
Hier ist eine Funktion, die Sie Ihrem bash_profile hinzufügen können, um dies zu vereinfachen.
Verwendung in einem Git-Repository:
branch
druckt alle lokalen Filialenbranch -r
druckt alle entfernten ZweigeFunktion:
quelle
In PowerShell werden im Folgenden Zweige auf der Fernbedienung angezeigt, die bereits zusammengeführt wurden und mindestens zwei Wochen alt sind (das
author:relative
Format zeigt Wochen statt Tage nach zwei Wochen an):quelle