مانند اکثر VCS ها، گیت توانایی برچسب گذاری نقاط خاص در تاریخچه یک مخزن را به عنوان مهم دارد.
به طور معمول، مردم از این قابلیت برای مشخص کردن نقاط انتشار (v1.0، v2.0 و غیره) استفاده می کنند.
در این بخش، شما یاد خواهید گرفت که چگونه برچسب های موجود را لیست کنید، چگونه برچسب ها را ایجاد و حذف کنید، و انواع مختلف برچسب ها چیست.
فهرست کردن تگ های موجود در گیت ساده است.
فقط تایپ کنید git tag (با اختیاری -l یا --list):
$ git tag
v1.0
v2.0این دستور برچسب ها را به ترتیب الفبا لیست می کند؛ ترتیب نمایش آنها اهمیت واقعی ندارد.
همچنین می توانید برچسب هایی را که با یک الگوی خاص مطابقت دارند، جستجو کنید. به عنوان مثال، منبع گیت شامل بیش از ۵۰۰ تگ است. اگر شما فقط علاقه مند به نگاه کردن به سری 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|
Note
|
Listing tag wildcards requires
-l or --list optionاگر شما فقط کل لیست برچسب ها را می خواهید، اجرای دستور با این حال، اگر شما در حال ارائه یک الگوی کارد جوینده برای مطابقت با نام های برچسب هستید، استفاده از |
گیت از دو نوع تگ پشتیبانی می کند: lightweight و annotated.
یک تگ سبک وزن بسیار شبیه به یک شاخه است که تغییر نمی کند — فقط یک اشاره کننده به یک commit خاص است.
با این حال، برچسب های تشریح شده به عنوان اشیاء کامل در پایگاه داده گیت ذخیره می شوند. آنها چک جمع شده اند؛ شامل نام، ایمیل و تاریخ برچسب دار هستند؛ یک پیام برچسب دار دارند؛ و می توانند با GNU Privacy Guard (GPG) امضا و تأیید شوند. به طور کلی توصیه می شود که شما برچسب های تفسیر شده ایجاد کنید تا بتوانید تمام این اطلاعات را داشته باشید؛ اما اگر شما یک برچسب موقت می خواهید یا به دلایلی نمی خواهید اطلاعات دیگر را نگه دارید، برچسب های سبک وزن نیز در دسترس هستند.
ایجاد یک برچسب با یادداشت در گیت ساده است.
ساده ترین راه این است که -a را مشخص کنید وقتی دستور tag را اجرا می کنید:
$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4-m یک پیام برچسب گذاری را مشخص می کند که با برچسب ذخیره می شود.
اگر شما یک پیام برای یک تگ با اشاره مشخص نکنید، Git ویرایشگر شما را راه اندازی می کند تا شما بتوانید آن را تایپ کنید.
شما می توانید داده های تگ را همراه با commit که با استفاده از دستور `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
Change version numberاین اطلاعات برچسب دار را نشان می دهد، تاریخ برچسب گذاری commit، و پیام تبصری قبل از نمایش اطلاعات commit.
راه دیگری برای برچسب گذاری commit ها با یک برچسب سبک وزن است.
این اساساً چک سوم تاییدیه ای است که در یک فایل ذخیره شده است — هیچ اطلاعات دیگری حفظ نمی شود.
برای ایجاد یک تگ سبک، هیچ یک از گزینه های -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
Change version numberشما همچنین می توانید بعد از اینکه از آنها گذشته اید، آنها را برچسب بزنید. فرض کنید که سابقه ی commit شما اینگونه باشد:
$ 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حالا فرض کنید فراموش کرده اید که پروژه را در نسخه 1.2 برچسب بزنید، که در "Update rakefile" commit بود. می تونی بعد از واقعه اضافهش کنی برای برچسب زدن به این کامیت، شما چک سوم کامیت (یا بخشی از آن) را در انتهای دستور مشخص می کنید:
$ git tag -a v1.2 9fceb02شما می توانید ببینید که شما تاگ commit:
$ 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
...به طور پیش فرض، دستور 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اگر تعداد زیادی tag دارید که میخواهید همزمان ارسال کنید، میتوانید از گزینه --tags در دستور git push استفاده کنید.
این کار تمام tagهایی را که هنوز در سرور راهدور وجود ندارند، منتقل میکند.
$ 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حالا، وقتی کسی از مخزن شما کلان یا استخراج می کند، همه ی برچسب های شما را هم می گیرد.
|
Note
|
git push pushes both types of tagsدستور |
برای حذف یک برچسب در مخزن محلی خود، می توانید از git tag -d <tagname> استفاده کنید.
به عنوان مثال، می توانیم برچسب سبک وزن بالا را به صورت زیر حذف کنیم:
$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)توجه داشته باشید که این کار برچسب را از هر سرور از راه دور حذف نمی کند. دو نوع رایج برای حذف یک برچسب از یک سرور از راه دور وجود دارد.
اولین تغییر `git push <remote> :refs/tags/<tagname> ` است:
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
- [deleted] v1.4-lwروش تفسیر این مطلب این است که آن را به عنوان مقدار صفر قبل از فشار دادن دو نقطه به نام تگ از راه دور بخوانیم، و به طور موثر آن را حذف کنیم.
راه دوم (و بصری تر) برای حذف یک برچسب از راه دور این است:
$ git push origin --delete <tagname>اگر می خواهید نسخه های فایل هایی که یک برچسب به آنها اشاره دارد را مشاهده کنید، می توانید یک چکآوت `git از آن برچسب را انجام دهید، اگرچه این مخزن شما را در حالت “detached HEAD” قرار می دهد، که دارای برخی از عوارض جانبی بد است:
$ git checkout v2.0.0
Note: switching to '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 -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout v2.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، اگر تغییراتی ایجاد کنید و سپس یک commit بسازید، tag بدون تغییر میماند، اما commit جدید به هیچ شاخهای تعلق نخواهد داشت و تنها از طریق hash دقیق commit قابل دسترسی است.
بنابراین، اگر نیاز به اعمال تغییرات دارید — برای مثال اصلاح یک باگ در نسخهای قدیمی — معمولاً بهتر است یک branch ایجاد کنید:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'اگر این کار را انجام دهید و یک commit را انجام دهید، شاخه version2 شما کمی متفاوت از برچسب v2.0.0 خواهد بود، زیرا با تغییرات جدید شما پیش خواهد رفت، بنابراین مراقب باشید.