TLDR bez adnotacji: zatwierdzenie; adnotacja: zatwierdzenie, autor, data, (opcjonalnie) komentarz
Antony Hatchkins
Odpowiedzi:
254
TL; DR
Różnica między poleceniami polega na tym, że jedno z nich udostępnia wiadomość znacznika, a drugie nie. Tag z adnotacjami ma komunikat, który można wyświetlić za pomocą git-show (1), podczas gdy tag bez adnotacji jest tylko nazwanym wskaźnikiem do zatwierdzenia.
Więcej informacji o lekkich tagach
Zgodnie z dokumentacją : „Aby utworzyć lekki znacznik, nie należy podawać żadnej z opcji -a, -s ani -m, wystarczy podać nazwę znacznika”. Istnieją również różne opcje pisania wiadomości na tagach z adnotacjami:
Gdy używasz git tag <tagname>, Git utworzy tag przy bieżącej wersji, ale nie poprosi o adnotację. Zostanie oznaczony bez wiadomości (jest to lekki znacznik).
Gdy używasz git tag -a <tagname>, Git poprosi cię o adnotację, chyba że użyłeś flagi -m, aby dostarczyć wiadomość.
Gdy używasz git tag -a -m <msg> <tagname>, Git oznaczy zatwierdzenie i opatrzy go adnotacją podaną wiadomością.
Podczas używania git tag -m <msg> <tagname>Git zachowuje się tak, jakbyś przekazał flagę -a dla adnotacji i użył dostarczonej wiadomości.
Zasadniczo sprowadza się to tylko do tego, czy tag ma mieć adnotację i inne powiązane informacje, czy nie.
Czy istnieje różnica między tagiem „adnotacja” a komunikatem zatwierdzenia?
Steve Bennett
3
@SteveBennett Tak. Adnotacja znacznika nie jest komunikatem zatwierdzenia. Nie możesz tego zobaczyć za pomocą git-log (1); musisz użyć git-show (1).
Todd A. Jacobs,
115
Różnica między tagami „z adnotacjami” i „lekkimi” wykracza poza wiadomość. Możesz mieć tag z adnotacjami bez wiadomości ( git tag -a <tag> -m ''), ale tag z adnotacjami zawsze ma taggera (autora) i datę .
Piotr Findeisen
1
Dla mnie to samo. Tagi wersji zwykle zawierają całkiem bezużyteczne wiadomości (czy może powiedzieć więcej niż nazwa? Po co?). Niestety, ta najczęściej głosowana odpowiedź nie wspomina o tej różnicy.
Piotr Findeisen
44
Inną ważną rzeczą, na którą należy zwrócić uwagę, jest to, że kiedy wpychasz tagi do zdalnego repozytorium za pomocą git push --follow-tags, tylko tagi z adnotacjami będą wypychane.
Xatoo,
209
Wciśnij tagi z adnotacjami, zachowaj lekki lokalny
man git-tag mówi:
Znaczniki z komentarzami są przeznaczone do wydania, a lekkie znaczniki są przeznaczone do prywatnych lub tymczasowych etykiet obiektów.
Niektóre zachowania różnicują je między sobą w sposób przydatny dla tego zalecenia, np .:
tagi z adnotacjami mogą zawierać wiadomość, twórcę i datę inną niż zatwierdzone przez nich zatwierdzenie. Możesz więc użyć ich do opisu wydania bez dokonywania zatwierdzenia wydania.
Lekkie tagi nie mają tych dodatkowych informacji i nie potrzebują ich, ponieważ będziesz ich używać tylko do rozwoju.
Zasadniczo lekkie znaczniki są tylko wskaźnikami do konkretnych zatwierdzeń. Żadne dalsze informacje nie są zapisywane ; z drugiej strony tagi z adnotacjami są zwykłymi obiektami , które mają autora i datę i można się do nich odwoływać, ponieważ mają własny klucz SHA.
Jeśli wiesz, kto oznaczył to, co i kiedy jest dla Ciebie istotne, użyj tagów z adnotacjami. Jeśli chcesz po prostu oznaczyć konkretny punkt w rozwoju , bez względu na to, kto i kiedy to zrobił, lekkie tagi są wystarczająco dobre.
Zwykle wybierasz tagi z adnotacjami, ale tak naprawdę to zależy od mistrza projektu Git.
Odpowiedzi:
TL; DR
Różnica między poleceniami polega na tym, że jedno z nich udostępnia wiadomość znacznika, a drugie nie. Tag z adnotacjami ma komunikat, który można wyświetlić za pomocą git-show (1), podczas gdy tag bez adnotacji jest tylko nazwanym wskaźnikiem do zatwierdzenia.
Więcej informacji o lekkich tagach
Zgodnie z dokumentacją : „Aby utworzyć lekki znacznik, nie należy podawać żadnej z opcji -a, -s ani -m, wystarczy podać nazwę znacznika”. Istnieją również różne opcje pisania wiadomości na tagach z adnotacjami:
git tag <tagname>
, Git utworzy tag przy bieżącej wersji, ale nie poprosi o adnotację. Zostanie oznaczony bez wiadomości (jest to lekki znacznik).git tag -a <tagname>
, Git poprosi cię o adnotację, chyba że użyłeś flagi -m, aby dostarczyć wiadomość.git tag -a -m <msg> <tagname>
, Git oznaczy zatwierdzenie i opatrzy go adnotacją podaną wiadomością.git tag -m <msg> <tagname>
Git zachowuje się tak, jakbyś przekazał flagę -a dla adnotacji i użył dostarczonej wiadomości.Zasadniczo sprowadza się to tylko do tego, czy tag ma mieć adnotację i inne powiązane informacje, czy nie.
źródło
git tag -a <tag> -m ''
), ale tag z adnotacjami zawsze ma taggera (autora) i datę .git push --follow-tags
, tylko tagi z adnotacjami będą wypychane.Wciśnij tagi z adnotacjami, zachowaj lekki lokalny
man git-tag
mówi:Niektóre zachowania różnicują je między sobą w sposób przydatny dla tego zalecenia, np .:
tagi z adnotacjami mogą zawierać wiadomość, twórcę i datę inną niż zatwierdzone przez nich zatwierdzenie. Możesz więc użyć ich do opisu wydania bez dokonywania zatwierdzenia wydania.
Lekkie tagi nie mają tych dodatkowych informacji i nie potrzebują ich, ponieważ będziesz ich używać tylko do rozwoju.
git describe
bez opcji wiersza poleceń widzi tylko tagi z adnotacjamiRóżnice wewnętrzne
zarówno lekkie, jak i opatrzone adnotacjami tagi to plik,
.git/refs/tags
który zawiera SHA-1w przypadku lekkich tagów SHA-1 wskazuje bezpośrednio na zatwierdzenie:
drukuje to samo co SHA-1 HEAD.
Nic więc dziwnego, że nie mogą zawierać żadnych innych metadanych.
znaczniki z adnotacjami wskazują obiekt znacznika w bazie danych obiektów.
zawiera SHA adnotowanego obiektu znacznika:
a następnie możemy uzyskać jego zawartość za pomocą:
próbka wyjściowa:
I w ten sposób zawiera dodatkowe metadane. Jak widać z danych wyjściowych, pola metadanych to:
Bardziej szczegółowa analiza formatu znajduje się w: Jaki jest format obiektu znacznika git i jak obliczyć jego SHA?
Bonusy
Sprawdź, czy tag ma adnotację:
Wyjścia
commit
dla lekkości, ponieważ nie ma obiektu znacznika, wskazuje on bezpośrednio na zatwierdzenietag
dla adnotacji, ponieważ w tym przypadku istnieje obiekt znacznikaWymień tylko lekkie znaczniki: Jak mogę wyświetlić wszystkie lekkie znaczniki?
źródło
Duża różnica jest doskonale wyjaśnione tutaj .
Zasadniczo lekkie znaczniki są tylko wskaźnikami do konkretnych zatwierdzeń. Żadne dalsze informacje nie są zapisywane ; z drugiej strony tagi z adnotacjami są zwykłymi obiektami , które mają autora i datę i można się do nich odwoływać, ponieważ mają własny klucz SHA.
Jeśli wiesz, kto oznaczył to, co i kiedy jest dla Ciebie istotne, użyj tagów z adnotacjami. Jeśli chcesz po prostu oznaczyć konkretny punkt w rozwoju , bez względu na to, kto i kiedy to zrobił, lekkie tagi są wystarczająco dobre.
Zwykle wybierasz tagi z adnotacjami, ale tak naprawdę to zależy od mistrza projektu Git.
źródło