Czy istnieje standardowa konwencja nazewnictwa dla tagów git? [Zamknięte]

229

Widziałem wiele projektów używających v1.2.3jako konwencji nazewnictwa tagów w git. Widziałem też jakiś użytek 1.2.3. Czy istnieje styl oficjalnie zatwierdzony lub czy istnieją jakieś dobre argumenty przemawiające za jego użyciem?

troelskn
źródło
19
Z 43 głosami i liczeniem, zastanawiam się, czy to bardzo cenne pytanie może zostać przeredagowane i ponownie otwarte, a niektóre odpowiedzi łączą wszystkie punkty w ładne streszczenie i znajdują się na szczycie? @ PeterEisentraut wydaje się być najbardziej kompletny; podczas gdy przyjęta odpowiedź ATM wydaje się nieco myląca. (Wydaje mi się, że sam będę używać tagów wer. 1.2.3 po przeczytaniu wszystkich punktów.)
HostileFork mówi: nie ufaj
1
SO służy do naprawy kodu. Najlepsze praktyki wydają się należeć do witryny softwareengineering.stackexchange.com lub codereview.stackexchange.com
Cees Timmerman
Rzuć okiem na semver.org (wersja semantyczna), który powinien dać ci kilka pomysłów.
vonbrand
moje doświadczenie mówi mi, że muszę użyć nieco innego schematu. 1. podkatalog: tag Git powinien przynajmniej zaczynać się, v/ponieważ grupuje tagi w przestrzeni nazw. 2. idealnie, tag powinien również zawierać akronim, który jednoznacznie identyfikuje aplikację. np v/myapp/1.0. Ułatwia to scalanie repozytorium git: w przypadku połączenia aplikacji tagi nie kolidują w przestrzeni nazw tagów.
axd

Odpowiedzi:

166

Wersja 1.0.0 Semantic Versioning autorstwa Toma Prestona-Wernera ze sławy GitHub zawierała specyfikację podrzędną dotyczącą tego problemu:

Specyfikacja tagowania (SemVerTag)

Tej pod-specyfikacji POWINNY być używane, jeśli używasz systemu kontroli wersji (Git, Mercurial, SVN itp.) Do przechowywania kodu. Korzystanie z tego systemu pozwala zautomatyzowanym narzędziom sprawdzać pakiet i określać zgodność SemVer i wydane wersje.

  1. Podczas oznaczania wydań w systemie kontroli wersji znacznikiem wersji MUSI być „vX.YZ”, np. „V3.1.0” .

Jednak po dyskusji zostało to usunięte i nie jest już obecne w najnowszej wersji specyfikacji SemVer (2.0.0 w momencie pisania). Późniejszy wątek dyskusji w tym samym miejscu pogłębił się i zaowocował nową Czy „v1.2.3” jest wersją semantyczną? jest dodany do FAQ w SemVer za masteroddział, chociaż w chwili pisania tego tekstu (ponad 2 lata później), zmiana ta jest nadal nieobecny w oficjalnie wydany spec.

otrzewna
źródło
9
Dzięki - To bardzo blisko. Życzę miałby kwalifikacje dlaczegov powinny być tam jednak.
troelskn
3
@troelskn @mojombo == Tom Preston-Werner
peritus
4
Zaktualizowany link: github.com/mojombo/semver.org/issues/1
Josh Lee
41
Wersja semantyczna 1.0.0 używa formatu „v1.2.3”. Wersja semantyczna 2.0.0-rc.1 prawdopodobnie używa formatu „1.2.3”. Artykuł ze specyfikacją tagowania (SemVerTag) został usunięty ze specyfikacji. Więcej tutaj: semver.org
petrnohejl
9
Ta odpowiedź jest wykonywana, gdy istniał stary semver (wersja 1.0). Obecnie przedrostek „v” został usunięty z semver v2.0. Szczegółowe informacje znajdują się w poście poniżej.
vitalii
111

Wydaje się, że istnieją dwie dominujące konwencje (zakładając, że przestrzegasz również rozsądnego standardu numerowania samych wydań):

  • v1.2.3
  • 1.2.3

Zaletą tego v1.2.3jest to, że dokumentacja Git (a także dokumentacja Mercurial) używa tego formatu w swoich przykładach i że korzysta z niego kilka „autorytetów”, takich jak jądro Linuksa i sam Git . (Wspomniana wersja semantyczna korzystała z niej, ale już jej nie ma.)

Zaletą tego 1.2.3jest to, że gitweb lub GitHub mogą automatycznie oferować tarball lub zip do pobrania formularza packagename-$tag.tar.gz(i myślę, że ustalono, że tarball nie powinien mieć nazwy package-v1.2.3.tar.gz). Alternatywnie możesz użyć git describebezpośrednio do wygenerowania numerów wersji tarball. W przypadku lekkich projektów bez formalnego procesu wydania te możliwości mogą być dość wygodne. Należy również zauważyć, że wersja semantyczna w żadnym wypadku nie jest jedynym lub powszechnie akceptowanym standardem numeracji wersji. I znaczące projekty, takie jak GNOME, a także niezliczone inne projekty używają 1.2.3nazw znaczników.

Myślę, że prawdopodobnie jest już za późno na konsolidację tych pozycji. Jak zawsze bądź konsekwentny i rozsądny.


Aktualizacja: Jak wspomniano w tym komentarzu, GitHub oferuje teraz nazwę tarball z „v” pozbawionym tagu.

Peter Eisentraut
źródło
13
Jeśli chodzi o generowanie GitHub i tarball: to już nie ma znaczenia. Usuwają „v” z tagu.
Hermann Bier,
6
Prefiks „v” jest również bardzo przydatny podczas sortowania znaczników w kolejności alfabetycznej. Mogą również istnieć inne tagi; oficjalnie w głównym repozytorium lub lokalnie do śledzenia pracy programisty. Z prefiksami „v” znaczniki wydania tworzą własną grupę, a nie są rozproszone w pozostałej części przestrzeni nazw.
Robie Basak
1
Zaktualizowałem odpowiedź, aby odzwierciedlić, że SemVer już nie używa v.
Adam Spiers
80

Powód poprzedzającego „v” jest historyczny. Starsze SCCS (cvs, rcs) nie mogły odróżnić identyfikatora znacznika od numeru wersji. Identyfikatory znaczników zostały ograniczone, aby nie zaczynały się od wartości liczbowej, aby można było wykryć numery wersji.

Bill Door
źródło
5
+1: Dobra pierwsza odpowiedź i imię z jednej z moich ulubionych książek :-) Być może twoja następna odpowiedź będzie dotyczyć bardziej aktualnego pytania.
Johnsyweb
1
... ale jeśli jest to prawdą tylko w przypadku starszych SVCS, co jeśli punkt tej odpowiedzi na pytanie dotyczące współczesnego Gita?
MestreLion
3
jest to nadal przydatne w git, dzięki czemu można łatwo odróżnić tagi wersji od innych tagów (tagi są przydatne do wielu innych rzeczy)
Benja
19

Nie żebym o tym wiedział.
Ale Git nie zezwoli na tag i gałąź o tej samej nazwie w tym samym czasie, więc jeśli masz gałąź „ 1.1” dla 1.1prac, nie umieszczaj tagu „ 1.1”, użyj na przykład „ v1.1

VonC
źródło
8
Użyj dla oddziałów 1.1.x. Otóż ​​to.
vitalii
1
niezły chwyt, dzięki.
RY
10

Nowe porady menedżerów pakietów do oznaczania wersji bez prefiksu v(jak kompozytor dla projektów PHP) SemVer 2.0 nie ma nic na temat specyfikacji znaczników. Odbywa się to celowo ze względu na unikanie konfliktów. Jednak to zaleca się , aby dodać przedrostek vw odnośnikach dokumentacji i tekstowych. Jako przykładowy format v1.0.4zamiast pełnego version 1.0.4lub ver. 1.0.4jest wystarczająco szczegółowy i elegancki w dokumentacji.

vitalii
źródło
22
„Zaleca się ...” Kto doradza i gdzie możemy zobaczyć tę poradę w jej oryginalnym kontekście?
bignose
8

Używamy rozgałęzień i tagów do pracy specyficznej dla wydania, a następnie odpowiednio:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Każdy programista podejmuje decyzję, czy praca, którą zamierzają wykonać, ma zastosowanie tylko do opanowania, czy też dotyczy branży. Widać, że zmiany dokonane w gałęzi są scalane z powrotem w systemie głównym, ale niektóre zmiany w systemie głównym nigdy nie zostaną wprowadzone w gałęzi (w tym przykładzie nie są przeznaczone dla wersji 1.6).

Kiedy jesteśmy gotowi do wydania, tagujemy go, a następnie scalamy po raz ostatni, i nazywamy tag o tej samej nazwie co gałąź, ale z dodatkowym identyfikatorem o konkretnej wersji, np. „1.6-release” lub „1.6-beta” lub „1.6-rc2” i tak dalej.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release
John Feminella
źródło
Dzięki - to dobra odpowiedź na opisanie sposobu rozgałęziania, ale tak naprawdę chodziło mi tylko o to, że istnieje jakiś konkretny (techniczny) powód używania określonego schematu nazewnictwa w git. Nadal jednak głosuję za ładnymi diagramami;)
troelskn
Ach, mam cię! Przepraszamy za niezrozumienie twojego pytania. Nie, nie ma konkretnego technicznego powodu, by używać określonej nazwy innej niż komunikacja międzyludzka. Możesz nazwać swoje gałęzie i tagi prawie tak, jak chcesz.
John Feminella,
Twoja gałąź wydania 1.6 nosi nazwę „gałąź 1.6”? Myślałem, że spacje nie są obsługiwane w nazwach oddziałów.
Cees Timmerman
8

Nie znam żadnych standardów. Po prostu wybieram nazwy tagów, aby móc je przykleić

VERSION = `git describe --tags`

w moich skryptach kompilacji. Konwencja nazewnictwa tagów faktycznie zależy od konwencji nazewnictwa wersji projektu.

Jörg W Mittag
źródło
1
git opisz --tags:>
Damien Carol