W przypadku wydań zwykle oznaczam coś w rodzaju v1.1.0. Podczas tworzenia skryptu tworzę plik fwVersion.c, który zawiera aktualne informacje git. Obecnie mam w pliku informacje o zmianach i gałęziach, ale chciałbym dodać znacznik.
czy to możliwe?
Odpowiedzi:
Sprawdź w dokumentacji git describe. Znajduje najbliższy znacznik do danego zatwierdzenia (jest to znacznik wskazujący na przodka zatwierdzenia) i opisuje to zatwierdzenie za pomocą znacznika.
Jeśli chcesz tylko wiedzieć, czy zatwierdzenie jest wskazywane przez tag, możesz sprawdzić wynik:
git describe --exact-match <commit-id>
git describe --all --exact-match `git rev-parse HEAD`
git describe --tags --abbrev=0 REVprzyda się, gdy nie chcesz mieć śmieci na tagu.
git describe --all(dla aktualnie sprawdzonego zatwierdzenia) lub git describe --all <commit>zawsze robiłem wszystko, czego kiedykolwiek chciałem.
Jeśli chcesz, to pierwszy znacznik zawierający zatwierdzenie, to:
git describe --contains <commit>
daje najlepszą odpowiedź IMO. Jeśli masz częste tagi niż używanie „git tag --contains” na starym zatwierdzeniu w dużym repozytorium, może to zająć trochę czasu, a otrzymasz wszystkie tagi, które zawierają to zatwierdzenie.
Ta forma opisu gita działa bardzo szybko i daje pojedynczą wartość wyjściową, która jest pierwszym znacznikiem zawierającym zatwierdzenie i jak daleko jest wstecz.
Co powiesz na to?
git tag --points-at <commit-id>
Daje ci wszystkie tagi, które ma dane zatwierdzenie (podczas gdy git describedaje tylko jeden) i nie zawiera tagów na podrzędnych zatwierdzeniach (tak jak git tag --containsrobi).
Możesz znaleźć te informacje w instrukcji
git tag --contains <commit>
Znalazłem kombinację obu najlepszych odpowiedzi, aby dać mi to, czego chciałem:
git describe --tags --exact-match <commit-id>
To daje ci tag, który jest TYLKO dla tego zatwierdzenia i dla tych bez adnotacji. Przydatne, gdy chcesz znaleźć tagi i nie martwić się wtedy o usunięcie formatowania (na przykład dla Jenkinsa).
na przykład. $ git describe --tags --exact-match head~2
Daje Ci:
$ ReleaseBeta
Konsolidacja niektórych odpowiedzi:
git tag --contains [<ref>]
i
git tag --points-at [<ref>]
Lub tylko
git tag
zachowują się tak samo, wypisując wszystkie (i wszystkie) znaczniki dla określonego ref lub bieżącego zatwierdzenia, jeśli nie zostały określone.
git describe --tags [<ref>]
gdzie <ref>domyślnie jest to aktualne zatwierdzenie, kończy z 128, jeśli żadne znaczniki nie są skojarzone z zatwierdzeniem, i drukuje znacznik powiązany z zatwierdzeniem (wydaje się, że nie ma wzoru).
git describe [<ref>]
zachowuje się tak samo jak with, --tagsz tą różnicą, że drukuje tylko etykiety z adnotacjami.
Podanie opcji --containsto describespowoduje wydrukowanie znacznika a, który jest powiązany z przodkiem określonego zatwierdzenia. Na przykład
$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1
git describe --tags <commit-id>dla tagów bez adnotacji