Git
Chapters ▾ 2nd Edition

2.6 Osnove Gita - Tagovanje

Tagovanje

Kao i većina VCS-ova, Git ima mogućnost tagovanja (obeležavanja, označavanja) određenih tačaka u istoriji kao važne. Tipično, ova funkcionalnost se koristi da bi se obeležile tačke izlaska novih verzija (v1.0 i tako dalje). U ovom odeljku, naučićete kako da izlistate dostupne tagove, kako da napravite nove tagove, i kakve vrste tagova postoje.

Listanje tagova

Listanje dostupnih tagova u Gitu je prilično direktno. Samo treba da ukucate git tag:

$ git tag
v0.1
v1.3

Ova komanda će izlistati tagove uređene u alfabetni redosled; dakle redosled kojim se javljaju nema nikakvu važnost.

Možete i da tražite tagove po nekom obrascu. Repozitorijum izvornog koda Gita, na primer, sadrži preko 500 tagova. Ako želite da pogledate samo seriju 1.8.5, možete da pokrenete ovo:

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

Kreiranje tagova

Git koristi dve osnovne vrste tagova: lake i pribeležene.

Laki tagovi dosta liče na granu koja se ne menja — to je samo pokazivač na određeni komit.

Pribeleženi tagovi se, s druge strane, čuvaju kao puni objekti u Gitovoj bazi podataka. Oni dobijaju svoju kontrolnu sumu; sadrže ime i mejl osobe koja je stavila tag kao i datum kada je to učinjeno; imaju tag poruku; i mogu da se potpišu i verifikuju pomoću GNU Privacy Guard (GPG). Generalno se preporučuje da pravite pribeležene tagove kako biste imali sve ove podatke; ali ako želite da dodate samo trenutni tag ili iz nekog razloga ne želite da čuvate ostale podatke o njemu, tu su laki tagovi.

Pribeleženi tagovi

Kreiranje pribeleženog taga u Gitu je jednostavno. Najlakši način je da specificirate -a kada pokrenete komandu tag:

$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4

Sa -m specificirate tag poruku, koja se čuva zajedno sa tagom. Ako ne specificirate poruku za pribeleženi tag, Git pokreće editor da biste mogli da je ukucate.

Možete videti podatke o tagu zajedno sa komitom koji je njime tagovan pomoću komande git show:

$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

To pokazuje informacije o osobi koja je dodala tag, datum kada je komit tagovan i pribeleženu poruku pre nego što pokaže podatke o samom komitu.

Laki tagovi

Drugi način da se taguju komitovi je pomoću lakih tagova. Ovo u suštini znači da se kontrolna suma komita smešta u fajl — nikakve druge informacije se ne čuvaju. Da biste napravili laki tag, samo nemojte da dodate nijednu od opcija -a, -s i -m:

$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5

Ako sada pokrenete git show za taj tag, nećete videti dodatne informacije o tagu. Komanda pokazuje samo komit:

$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

Naknadno tagovanje

Možete da tagujete komitove i nakon što ih prođete. Pretpostavimo da vam istorija komitova izgleda ovako:

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

Sada, pretpostavimo da ste zaboravili da dodate tag projektu kod verzije v1.2, koja je izašla uz komit updated rakefile. Možete da dodate tag iako ste već prošli taj komit. Da biste ga tagovali, treba da specificirate čeksumu komita (ili njen deo) na kraj komande:

$ git tag -a v1.2 9fceb02

Sada vidite da ste tagovali komit:

$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5

$ git show v1.2
tag v1.2
Tagger: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Feb 9 15:32:16 2009 -0800

version 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>
Date:   Sun Apr 27 20:43:35 2008 -0700

    updated rakefile
...

Deljenje tagova

Po podrazumevanim podešavanjima, komanda git push ne prenosi tagove udaljenim serverima. Moraćete da eskplicitno gurnete tagove deljenom serveru nakon što ih kreirate. Ovaj proces je isti kao deljenje udaljenih grana — možete da ga pokrenete sa git push origin <ime-taga>.

$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.5 -> v1.5

Ako imate puno tagova koje želite da gurnete odjednom, možete da koristite i --tags opciju uz komandu git push. Ovo će preneti sve tagove na udaljeni server koji trenutno nisu tamo.

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw

Sada, kada neko klonira ili povuče sa vašeg repozitorijuma, dobiće i sve vaše tagove.

Čekautovanje tagova

Ne možete bukvalno da čekautujete tag u Gitu, jer oni ne mogu da se pomeraju. Ako želite da stavite verziju svog repozitorijuma u radni direktorijum koja izgleda kao specificirani tag, možete da napravite novu granu na specificiranom tagu sa git checkout -b [branchname] [tagname]:

$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'

Naravno, ako uradite ovo i zatim komitujete, vaša grana version2 će biti neznatno drugačija od vašeg v2.0.0 taga jer će se pomeriti unapred zajedno sa novim promenama, zato budite obazrivi.