Git
Chapters ▾ 2nd Edition

2.6 Git’in Əsasları - Etiketləmə

Etiketləmə

Əksər VNS’lər kimi, Git, depo tarixçəsindəki müəyyən nöqtələri önəmli olaraq etiketləyə bilir. Tipik olaraq, insanlar bu funksionallıqdan istifadə nöqtələrini qeyd etmək üçün istifadə edirlər (v1.0,` v2.0` və s.). Bu bölmədə mövcud etiketlərin necə siyahıya alınmasını, etiketləri necə yaratmaq və silməyi və fərqli etiket növlərinin nə olduğunu öyrənəcəksiniz.

Etiketlərinizi Listləyin

Git-də mövcud etiketlərin siyahısı sadədir. Yalnız git tag yazın (əlavə olaraq -l və ya --list ilə):

$ git tag
v1.0
v2.0

Bu əmr etiketləri əlifba sırası ilə sıralayır; göstərilən qaydanın heç bir əsası yoxdur.

Ayrıca müəyyən bir xüsusi nümunəyə uyğun etiketlər axtara bilərsiniz. Məsələn Git mənbə repo, 500-dən çox etiketi ehtiva edir. Yalnız 1.8.5 seriyasına baxmaq istəyirsinizsə, bunu işlədə bilərsiniz:

$ 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
Note
Etiket kartı siyahısına qoymaq üçün -l və ya --list seçimi tələb olunur

Etiketlərin yalnız bütün siyahısını istəsəniz, git tag əmrini istifadə edərək bir siyahı istəməyinizi ehtimal edir və təqdim edir; bu vəziyyətdə -l və ya --list istifadəsi istəyə bağlıdır.

Lakin, etiket adlarına uyğun bir işaret naxışını təqdim edirsinizsə, -l və ya - List istifadəsi məcburidir.

Etiket Yaratmaq

Git iki növ etiket dəstəkləyir: yüngüləlavə.

Yüngül etiket dəyişməyən bir budağa bənzəyir - yalnız müəyyən bir öhdəliyi göstərir.

Qeyd olunan etiketlər Git verilənlər bazasında tam obyekt kimi saxlanılır. Çeki qiymətləndirdilər; etiketçi adını, e-poçtunu və tarixini ehtiva edir; etiketləmə mesajı var; və GNU Privacy Guard (GPG) ilə imzalanıb təsdiqlənə bilər. Bütün bu məlumatlara sahib olmağınız üçün ümumiyyətlə annotasiya etiketləri yaratmağınız tövsiyə olunur; ancaq müvəqqəti etiket istəsəniz və ya nədənsə digər məlumatı saxlamaq istəmirsinizsə yüngül etiketlər də mövcuddur.

Əlavə Etiketlər

Git-də əlavə etiket yaratmaq çox sadədir. Ən asan yol, tag əmrini işlədərkən -a göstərməkdir:

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

-m etiket ilə birlikdə saxlanan bir etiket mesajını göstərir. Əlavə etiket üçün bir mesaj göstərməmisinizsə, Git redaktorunuzu işə salır ki, daxil edə bilərsiniz.

Etiket məlumatlarını git show əmrindən istifadə edərək etiketlənmiş öhdəliklə birlikdə görə bilərsiniz:

$ 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

    Change version number

Bu etiket məlumatını, öhdəliyin etiketlənmə tarixini və öhdəlik məlumatını göstərmədən əvvəl qeyd mesajını göstərir.

Yüngül Etiketlər

Etiketləyin başqa bir yolu yüngül bir etiketdir. Bu, əsasən bir sənəddə saxlanılan tapşırıq çeki məbləğidir - başqa heç bir məlumat saxlanılmır. Yüngül bir etiket yaratmaq üçün -a,` -s` və ya -m variantlarından heç birini təmin etmədən etiket adını təqdim etmə bəs edər:

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

Bu dəfə etiketdə git show işlədirsinizsə, əlavə etiket məlumatlarını görmürsünüz. Komanda sadəcə öhdəliyi göstərir:

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

    Change version number

Daha Sonra Etiketləmə

Keçmişləri köçürdükdən sonra qeyd edə bilərsiniz. Təqdim etdiyiniz tarix belə görünərsə:

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Create write support
0d52aaab4479697da7686c15f77a3d64d9165190 One more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc Add commit function
4682c3261057305bdd616e23b64b0857d832627b Add todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc Commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme

İndi güman ki, layihəni v1.2-də etiketləməyi unutmusunuz ki, bu da “Yeniləmə rakefile” commitində idi. Faktdan sonra əlavə edə bilərsiniz. Bu əməli etiketləmək üçün əmr sonunda tapşırıq çeki məbləğini (və ya onun bir hissəsini) göstərin:

$ git tag -a v1.2 9fceb02

Commit etiketlədiyinizi görə bilərsiniz:

$ 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

    Update rakefile
...

Etiketləri Paylaşmaq

Varsayılan olaraq, git push əmri etiketləri uzaq serverlərə ötürmür. Etiketləri yaratdıqdan sonra açıq şəkildə ortaq bir serverə push olacaqsınız. Bu proses uzaq filialları bölüşmək üçün git push origin <tagname> işlədə bilərsiniz.

$ 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

Push istədiyiniz çox etiket varsa, git push əmrinə --tags seçimini də istifadə edə bilərsiniz. Bu, bütün etiketlərinizi artıq olmayan uzaq serverə köçürəcəkdir.

$ 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

İndi başqası deponuzu klonlaşdırdıqda və ya pull edəndə bütün etiketlərinizi də alacaqsınız.

Note
git push hər iki etiketi push edir

git push <remote> --tags həm yüngül, həm də əlavə etiketlər basacaq. Hal-hazırda yalnız yüngül etiketləri basmaq üçün bir seçim yoxdur, ancaq git push <remote> --follow-tags istifadə etsəniz, yalnız əlavə etiketlər uzaqdan push ediləcək.

Etiketləri Silmək

Yerli depolarınızdakı etiketi silmək üçün git tag -d <tagname> istifadə edə bilərsiniz. Məsələn, yuxarıdakı yüngül etiketimizi silə bilərik:

$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

Qeyd edək ki, bu etiketi heç bir uzaq serverdən silmir. Bir etiketi uzaq bir serverdən silmək üçün iki ümumi variant var.

Birinci variant git push <remote> :refs/tags/<tagname>-dır:

$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
 - [deleted]         v1.4-lw

Yuxarıda göstərilənləri şərh etməyin yolu, nöqtəni kolon uzaq məsafəli etiket adına sövq edilərək effektiv şəkildə silməkdən əvvəl oxumaqdır.

Uzaq bir etiketi silməyin ikinci (və daha asan) yolu:

$ git push origin --delete <tagname>

Etiketlərin Yoxlanılması

Etiket işarələdiyi sənədlərin versiyalarına baxmaq istəyirsinizsə, etiketinizə git checkout edə bilərsiniz, baxmayaraq ki, bu, depolarınızı bəzi pis yan təsirləri olan “detached HEAD” vəziyyətinə qoyur:

$ git checkout v2.0.0
Note: checking out 'v2.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” vəziyyətində, dəyişiklik edirsinizsə və sonra öhdəlik yaradırsınızsa, etiket eyni qalacaq, ancaq yeni öhdəliyiniz heç bir branch-a aid olmayacaq və dəqiq bir işləmə hash istisna olmaqla əlçatmaz olacaq. Beləliklə, dəyişiklik etmək lazımdırsa - məsələn, köhnə bir versiyada bir səhv düzəldirsinizsə - ümumiyyətlə bir filial yaratmaq istəyəcəksiniz:

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

Bunu etsəniz və öhdəlik götürsəniz, version2 filialınız v2.0.0 etiketinizdən bir qədər fərqli olacaq, çünki yeni dəyişikliklərinizlə irəliləyəcək, buna görə diqqətli olun.