Was ist mit allen Vorschlägen falsch (außer der Erklärung von Matthew Brett , aktuell in diesem Antwortbeitrag)?
Führen Sie einfach einen Befehl von anderen auf jQuery Git Geschichte geliefert , wenn Sie an anderer Stelle der Geschichte und Prüfergebnis mit visueller Tagging Geschichte Darstellung (I tat das ist , warum Sie diesen Beitrag sehen):
$ git log --graph --all --decorate --oneline --simplify-by-decoration
Heutzutage führen viele Projekte Releases (und damit Tagging) in einem von der Hauptlinie getrennten Zweig durch .
Dafür gibt es starke Gründe . Schauen Sie sich einfach alle etablierten JS / CSS-Projekte an. Für Benutzerkonventionen enthalten sie binäre / minimierte Release-Dateien in DVCS. Natürlich möchten Sie als Projektbetreuer Ihren Mainline- Diff- Verlauf nicht mit nutzlosen binären Blobs verschmutzen und das Festschreiben von Build-Artefakten außerhalb der Mainline durchführen .
Da Git DAG und keine lineare Historie verwendet, ist es schwierig, die Entfernungsmetrik zu definieren, sodass wir sagen können, dass die Drehzahl meiner am nächsten kommt HEAD!
Ich beginne meine eigene Reise in (schau hinein, ich habe keine ausgefallenen Proof-Bilder in diesen langen Beitrag kopiert):
Was ist das nächste Tag in der Vergangenheit in Bezug auf die Verzweigung in Git?
Derzeit habe ich 4 vernünftige Definitionen des Abstands zwischen Tag und Revision mit abnehmender Nützlichkeit:
- Länge des kürzesten Wegs von
HEAD, um die Basis mit dem Tag zusammenzuführen
- Datum der Zusammenführungsbasis zwischen
HEADund Tag
- Anzahl der Umdrehungen , die vom HEAD aus erreichbar, aber vom Tag aus nicht erreichbar sind
- Datum des Tags unabhängig von der Zusammenführungsbasis
Ich weiß nicht, wie ich die Länge des kürzesten Weges berechnen soll .
Skript, das Tags nach dem Datum der Zusammenführungsbasis zwischen HEADund tag sortiert :
$ git tag \
| while read t; do \
b=`git merge-base HEAD $t`; \
echo `git log -n 1 $b --format=%ai` $t; \
done | sort
Es ist für die meisten Projekte verwendbar.
Skript, das Tags nach der Anzahl der Umdrehungen sortiert , die über HEAD erreichbar, aber nicht über tag erreichbar sind:
$ git tag \
| while read t; do echo `git rev-list --count $t..HEAD` $t; done \
| sort -n
Wenn Ihre Projekthistorie seltsame Daten für Commits hat (aufgrund von Rebases oder einer anderen Neufassung der Historie oder eines Trottels, vergessen Sie, die BIOS-Batterie oder andere Magie, die Sie für die Historie ausführen, zu ersetzen), verwenden Sie das obige Skript.
Für die letzte Option ( Datum des Tags unabhängig von der Zusammenführungsbasis ), um eine Liste der Tags nach Datum sortiert zu erhalten, verwenden Sie:
$ git log --tags --simplify-by-decoration --pretty="format:%ci %d" | sort -r
Um das aktuelle Überarbeitungsdatum bekannt zu machen, verwenden Sie:
$ git log --max-count=1
Beachten Sie, dass git describe --tagsdie Verwendung in eigenen Fällen erfolgt, jedoch nicht zum Auffinden des vom Menschen erwarteten nächsten Tags in der Projekthistorie .
HINWEIS Sie können die oben genannten Rezepte für jede Revision verwenden. Ersetzen HEADSie sie einfach durch das, was Sie möchten!