Git
Chapters ▾ 2nd Edition

2.6 Основите на Git - Tagging

Tagging

Како и повеќето VCSs, Git има способност да означува одредени точки во историјата како важни. Обично луѓето ја користат оваа функционалност за обележување на точки за ослободување (v1.0, и така натаму). Во овој дел, ќе научите како да ги наведете достапните ознаки, како да креирате нови тагови и што се различни типови на ознаки.

Листата на вашите етикети

Листата на достапни ознаки во Git е јасна. Само внесете git tag (со опција` -l` или --list):

$ git tag
v0.1
v1.3

Оваа команда ги наведува таговите по азбучен редослед; редоследот по кој тие се појавуваат нема вистинска важност.

Можете исто така да пребарувате за ознаки кои одговараат на одреден модел. На пример, изворот repo на Git содржи повеќе од 500 ознаки. Ако сте заинтересирани само за гледање на серијата 1.8.5, можете да го направите ова:

$ 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
  1. Измените ознаки на ознаки бараат -l или` --list` опција

Ако сакате само целата листа на ознаки, извршувајќи ја командата git tag implicitly претпоставува дека сакате листа и обезбедува една; употребата на -l или` -list` во овој случај не е задолжително.

Доколку, сепак, снабдувате шема со џокер да ги совпаѓате имињата на ознаките, употребата на -l или` -list` е задолжителна.

Креирање на етикети

Git поддржува два типа на ознаки: lightweight и annotated.

Лесна ознака е многу слична на гранка која не се менува - тоа е само покажувач за одредена обврска.

Сепак, означените ознаки се чуваат како целосни објекти во базата на податоци Git. Тие се проверуваат; содржи името на етикетата, е-поштата и датумот; имаат порака за означување; и може да биде потпишан и потврден со GNU Privacy Guard (GPG). Општо е препорачливо да креирате означени ознаки за да можете да ги имате сите овие информации; но ако сакате привремена ознака или поради некоја причина не сакате да ги задржите другите информации, лесни ознаки се достапни исто така.

Анкетирани ознаки

Креирањето означена ознака во Git е едноставна. Најлесен начин е да се наведе -a кога ќе ја стартувате командата` tag`:

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

-m наведува порака за означување, која е зачувана со ознаката. Ако не наведете порака за обележана ознака, Git го пушти уредот за да може да го напишете.

Можете да ги видите податоците од ознаката заедно со посветеноста која беше обележана со користење на командата 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

Дека ги покажува информациите за означувачот, датумот на кој е обележана посветеноста и пораката за коментар пред да се прикажат информациите за обврски.

Лесни ознаки

Друг начин за означување на обврските е со лесна ознака. Ова во основа е проверка на зачувување што е зачувана во датотека - нема други информации што се чуваат. За да креирате лесна ознака, не давајте ниту една од -a,` -s` или -m опциите, туку да обезбедите име на ознака:

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

Овој пат, ако го стартувате git show на ознаката, не ги гледате дополнителните информации за тагот. Командата само ја покажува посветеноста:

$ 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

Селектирај подоцна

Можете исто така да означувате обврски откако сте се преселиле минатото. Да претпоставиме дека вашата историја на извршенија изгледа вака:

$ 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

Сега, претпоставувај дека заборавивте да го означите проектот на v1.2, кој беше на "updated rakefile" извршат. Можете да го додадете по факт. За да го означите тоа извршување, на крајот од командата ќе го наведете контролниот сума за извршување (или дел од него):

$ git tag -a v1.2 9fceb02

Може да се види дека сте го обележале посветеноста:

$ 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
...

Споделување ознаки

По дифолт, командата git push не ги пренесува ознаките на оддалечени сервери. Ќе мора експлицитно да притиснете тагови на споделен сервер откако ќе ги креирате. Овој процес е исто како споделување на оддалечени гранки - може да го стартувате git push origin <tagname>.

$ 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

Ако имате многу ознаки кои сакате да ги притиснете одеднаш, исто така можете да ја користите опцијата --tags на командата` git push`. Ова ќе ги пренесе сите ваши ознаки на оддалечениот сервер што не се веќе таму.

$ 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

Сега, кога некој друг клонира или повлекува од вашето складиште, тие ќе ги добијат и сите ваши ознаки.

Проверка на тагови

Ако сакате да ги видите верзиите на датотеките на кои означува ознака, можете да направите проверка на git, иако ова го става вашето складиште во "detached HEAD"(отстранета) состојба, која има некои лоши несакани ефекти:

$ git checkout 2.0.0
Note: checking out '2.0.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch>

HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final

$ git checkout 2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... add atlas.json and cover image

Во 'detached HEAD' состојба, ако направите промени, а потоа креирате залог, ознаката ќе остане иста, но вашата нова обврска нема да припаѓа на која било гранка и ќе биде недостапна, освен со точната обврска за извршување. Така, ако треба да направите промени - да речете дека наместите грешка на постара верзија, на пример - обично ќе сакате да креирате гранка:

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

Ако го направите ова и направите залог, вашата гранка "version2" ќе биде малку поинаква од вашата ознака "v2.0.0", бидејќи ќе се придвижи напред со вашите нови промени, па бидете внимателни.