Wat betekent ^{} in git?

Ik kwam twee vreemde tekens tegen aan het einde van een git ls-remote-opdracht en ik vraag me af wat dit betekent?

0e4c39557ccb6789173c  refs/tags/2011-11-04
966f8df553f18c486820  refs/tags/2011-11-04^{}

Weet je toevallig wat deze ^{} betekent? En waarom lijkt deze git-tag gedupliceerd?


Antwoord 1, autoriteit 100%

De ^{}notatie wordt uitgelegd in de gitrevisionshandleiding:

<rev>^{}, e.g. v0.99.8^{} 

Een achtervoegsel ^ gevolgd door een leeg accoladepaar betekent dat het object een tag kan zijn en recursief de referentie van de tag kan verwijderen totdat een niet-tagobject wordt gevonden.

In dit geval – refs/tags/2011-11-04is de tag die verwijst naar het tag-object 0e4c39557ccb6789173c. Door refs/tags/2011-11-04^{}uit te voeren, kunnen we de referentie van de tag naar het uiteindelijke niet-tagobject, dat in dit geval is – 966f8df553f18c486820(een verbinden). Merk op dat ^{}een noop is wanneer toegepast op niet-tagobjecten.

Het git show-refcommando kan worden gebruikt om zowel tags te zien als de uiteindelijke gederefereerde non-tag objecten:

$ git show-ref --tags
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}
$ git show-ref --tags --dereference
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
6ddc0964034342519a87fe013781abf31c6db6ad refs/tags/v0.99.9c^{}
055e4ae3ae6eb344cbabf2a5256a49ea66040131 refs/tags/v1.0rc4
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}

Van de git show-refhandleiding:

-d 
--dereference 

Dereferentie-tags ook in object-ID’s. Ze worden weergegeven met “^{}” toegevoegd.


Antwoord 2, autoriteit 25%

Merk op dat git ls-remoteheeft een nieuw filter met git 2.8 (maart 2016).

Zie commit 99c08d4, vastleggen ba5f28b, , commit 40a8852, commit 54813bd(18 jan 2016) door Thomas Gummerer (tgummerer).
Voorgesteld door: pedro rijo (pedrorijo91).
(Samengevoegd door Junio ​​C Hamano — gitsterin commit bd6934a, 03 feb 2016)

Dat betekent dat u alleen de tags kunt weergeven met

git ls-remote --refs

Geef geen verwijderde tags of pseudorefs zoals HEAD in de uitvoer weer.

Other episodes