Git
Chapters ▾ 2nd Edition

2.6 Git асослари - Тамғалаш

Тамғалаш

Кўпгина ТБТ лар каби Git аниқ бир вазиятларни тарихдаги муҳимлар сифатида белгилаб кетишни билади. Қоидага асосан ушбу функционалдан талқинларни йўлга қўйишда фойдаланишади. Ушбу бўлимда сиз мавжуд тамғаларни (tag) қандай кўриш ва янгиларини қандай яратишни ўрганасиз. Сиз шунингдек, тамғалар тури ўзида нималарни мужассамлаштиришини билиб оласиз.

Тамғаларни кўриш

Git да мавжуд тамғаларни кўриш онсонлик билан бажарилади. git tag териш етарли:

$ git tag
v0.1
v1.3

Уушбу команда тамғаларни алфавит тарзда тартибланган ҳолда намойиш этади; уларни қай бири биринчи яратилганлигини аҳамияти йўқ.

Тамғаларни қидириш учун шаблонларни қўллашингиз мумкин. Масалан 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

Тамғаларни яратиш

Git икки хил турдаги тамғаларни ишлатади: енгил вазнли ва аннотацияланган.

Енгил вазнли тамға – бу тармоққа ўхшаб кетади ва ўзгартирилмайдиган аниқ бир фиксирлашга кўрсаткич.

Аннотацияланган тамғалар Git нинг маълумотлар омборида тўлиқ бир объектлар тарзида сақланади. Улар текширув йиғиндисига эга бўлишади, тамғани қўйганни номини, e-mail ва санани сақлайди, шарҳларга эга бўлиши, имзоланган ва GNU Privacy Guard (GPG) ёрдамида текширилиши мумкин. Одатда юқорида санаб ўтилган маълумотларга эга бўлиш учун аннотацияланган тамғалар яратиш тавсия этилади. Лекин сиз вақтинчаликка тамға яратмоқчи бўлсангиз ёки қайсидир сабабга кўра бошқа маълумотларни сақлашни хоҳламасангиз у ҳолда енгил вазнли тамғаларни яратиш ҳам етарли.

Аннотацияланган тамғалар

Git да аннотацияланган тамғалар енгилгина яратилади. Энг содда услуб tag командаси бажарилаётган вақтда -a параметрини кўрсатиш:

$ 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

Энди айтайлик сиз “updated rakefile” фиксирлаши бўлган жойда v1.2 ном билан тамғалашни унутгансиз. Сиз кечроқ ҳам тамғалашни киритишингиз мумкин. Фиксирлашни тамғалаш учун уни текширув йиғиндисини (ёки уни қисмини) команда охирида келтиринг:

$ 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 [тамға номи].

$ 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

Агар сизда бир қанча тамғалар бўлса ва сиз уларни бир команда билан ҳаммасини юборишни хоҳласангиз git push командасида --tags опциясини ишлатишингиз мумкин. Бундай вазиятда сизни барча тамғаларингиз юборилади агарда албатта улар серверда бор бўлмаса.

$ 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

Энди кимдир сизни омборингиздан клонласа ёки pull командасини бажарса у қўшимча тарзда сиз яратган тамғаларни ҳам олади.

Тамғаларни текшириш

Сиз аслида тамғаларни текшира олмайсиз Git да, токи улар ҳамма жойда бўлмаса. Агар сиз сизнинг ишчи каталогингиздаги омборингизга махсус тамға сифатида талқинни қўймоқчи бўлсангиз сиз махсус тамғали тармоқ яратишингиз мумкин:

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

Албатта агар сиз буни қилсангиз ва фиксирлашни бажарсангиз, сизнинг version2 талқинингизда янги ўзгаришлар бўлиши мумкинлиги туфайли у сизнинг v2.0.0 тамғангиздан бирозгина фарқ қилиши мумкин, шунинг учун уни бажаришда эътиборли бўлиш керак бўлади.