Ich tippe git tagund es listet meine aktuellen Tags auf:
1.2.3
1.2.4
Wie kann ich feststellen, welche davon mit Anmerkungen versehen und welche leicht sind?
Ich tippe git tagund es listet meine aktuellen Tags auf:
1.2.3
1.2.4
Wie kann ich feststellen, welche davon mit Anmerkungen versehen und welche leicht sind?
Antworten:
git for-each-refHier erfahren Sie, was jede Referenz standardmäßig ist, ihre ID und ihren Typ. Um es auf nur Tags zu beschränken, tun Sie dies git for-each-ref refs/tags.
Die Ausgabe besteht aus drei Feldern: dem Hash eines Objekts, dem Typ des Objekts und dem Namen in refs / tags, der sich auf das Objekt bezieht. Ein sogenanntes "leichtes" Tag ist ein Name in refs / tags, der sich auf ein
commitObjekt bezieht . Ein "kommentiertes" Tag ist ein Name in refs / tags, der auf eintagObjekt verweist .- Solomon Slow (in den Kommentaren)
Hier ist ein Beispiel:
git for-each-ref refs/tags
902fa933e4a9d018574cbb7b5783a130338b47b8 commit refs/tags/v1.0-light
1f486472ccac3250c19235d843d196a3a7fbd78b tag refs/tags/v1.1-annot
fd3cf147ac6b0bb9da13ae2fb2b73122b919a036 commit refs/tags/v1.2-light
commitoder a auf tag. Ich nehme an, diese weisen auf leichte bzw. mit Anmerkungen versehene Tags hin.
commitalso leicht und tagmit Anmerkungen versehen?
commitObjekt bezieht . Ein "kommentiertes" Tag ist ein Name in refs / tags, der auf ein tagObjekt verweist .
Der git show-ref -d --tagsBefehl erledigt dies, da Lightweight-Tags einmal in der Ausgabe und annotierte Tags zweimal vorkommen. Außerdem enthalten nur mit Anmerkungen versehene Tags den Dereferenzierungsoperator "^ {}" in der Ausgabe.
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3
7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{}
Und diese Ausgabe kann dann mit den Befehlen unix sort, sed, cut und uniq massiert werden, um die Ausgabe besser lesbar zu machen:
git show-ref -d --tags |
cut -b 42- | # to remove the commit-id
sort |
sed 's/\^{}//' | # remove ^{} markings
uniq -c | # count identical lines
sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated
sed 's/1\ refs\/tags\//lw /'
Für mein ursprüngliches Repo (aus meiner Frage) wird Folgendes ausgegeben:
lw 1.2.3
a 1.2.4
(zB war 1.2.3 "leicht" und "1.2.4" wurde kommentiert).
Holen Sie sich den Tag-Namen (sagen wir foo) und machen Sie dann a git cat-file -t foo. Wenn es sich um ein mit Anmerkungen versehenes Tag handelt, cat-filewird Ihnen mitgeteilt, dass es sich um ein "Tag" handelt. Wenn es sich um ein einfaches Tag handelt, cat-filewird Ihnen mitgeteilt, dass es sich um ein "Commit" handelt.
Update: Wie Oxymoron in seinem Kommentar sagte, git showfunktioniert es auch, aber es gibt Ihnen mehr Informationen als nur, um welche Art von Tag es sich handelt.
Bitte versuchen Sie es mit git describe
https://git-scm.com/docs/git-describe
Standardmäßig (ohne --all oder --tags) zeigt git description nur kommentierte Tags an.
git tag -netwas für dich