-
1. شروع به کار (getting started)
-
2. مقدمات گیت (git basics chapter)
- 2.1 گرفتن یک مخزن گیت (Getting a Git Repository)
- 2.2 ثبت تغییرات در مخزن (Recording Changes to the Repository)
- 2.3 مشاهده تاریخچه کامیتها (Viewing the Commit History)
- 2.4 بازگرداندن تغییرات (Undoing Things)
- 2.5 کار کردن با ریموت ها (Working with Remotes)
- 2.6 تگ کردن (Tagging)
- 2.7 نام مستعار گیت (Git Aliases)
- 2.8 خلاصه (summary)
-
3. انشعابگیری در گیت (Git Branching)
-
4. گیت روی سرور (Git on the server)
- 4.1 پروتکلها (The Protocols)
- 4.2 راهاندازی گیت روی یک سرور (Getting Git on a Server)
- 4.3 ایجاد کلید عمومی SSH شما (Generating Your SSH Public Key)
- 4.4 نصب و راهاندازی سرور (Setting up server)
- 4.5 سرویسدهنده گیت (Git Daemon)
- 4.6 HTTP هوشمند (Smart HTTP)
- 4.7 گیتوب (GitWeb)
- 4.8 گیتلب (GitLab)
- 4.9 گزینههای میزبانی شخص ثالث (Third Party Hosted Options)
- 4.10 خلاصه (Summary)
-
5. گیت توزیعشده (Distributed git)
-
6. GitHub (گیت هاب)
-
7. ابزارهای گیت (Git Tools)
- 7.1 انتخاب بازبینی (Revision Selection)
- 7.2 مرحلهبندی تعاملی (Interactive Staging)
- 7.3 ذخیره موقت و پاکسازی (Stashing and Cleaning)
- 7.4 Signing Your Work (امضای کارهای شما)
- 7.5 جستجو (Searching)
- 7.6 بازنویسی تاریخچه (Rewriting History)
- 7.7 بازنشانی به زبان ساده (Reset Demystified)
- 7.8 ادغام پیشرفته (Advanced Merging)
- 7.9 بازاستفاده خودکار از حل تضادها (Rerere)
- 7.10 اشکالزدایی با گیت (Debugging with Git)
- 7.11 سابماژول ها (Submodules)
- 7.12 بستهبندی (Bundling)
- 7.13 جایگزینی (Replace)
- 7.14 ذخیرهسازی اطلاعات ورود (Credential Storage)
- 7.15 خلاصه (Summary)
-
8. سفارشیسازی Git (Customizing Git)
-
9. گیت و سیستمهای دیگر (Git and Other Systems)
-
10. (Git Internals)
- 10.1 ابزارها و دستورات سطح پایین (Plumbing and Porcelain)
- 10.2 اشیا گیت (Git Objects)
- 10.3 مراجع گیت (Git References)
- 10.4 فایلهای بسته (Packfiles)
- 10.5 نگاشت (The Refspec)
- 10.6 پروتکلهای انتقال (Transfer Protocols)
- 10.7 نگهداری و بازیابی دادهها (Maintenance and Data Recovery)
- 10.8 متغیرهای محیطی (Environment Variables)
- 10.9 (Summary)
-
A1. پیوست A: گیت در محیطهای دیگر (Git in Other Environments)
- A1.1 رابط های گرافیکی (Graphical Interfaces)
- A1.2 Git در ویژوال استودیو (Git in Visual Studio)
- A1.3 Git در Visual Studio Code (Git in Visual Studio Code)
- A1.4 Git در IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine (Git in IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine)
- A1.5 Git در Sublime Text (Git in Sublime Text)
- A1.6 گیت در بش (Git in Bash)
- A1.7 Git در Zsh (Git in Zsh)
- A1.8 Git در PowerShell (Git in PowerShell)
- A1.9 خلاصه (Summary)
-
A2. پیوست B: گنجاندن گیت در برنامههای شما (Embedding Git in your Applications)
-
A3. پیوست C: دستورات گیت (Git Commands)
- A3.1 تنظیم و پیکربندی (Setup and Config)
- A3.2 گرفتن و ایجاد پروژهها (Getting and Creating Projects)
- A3.3 نمونهبرداری پایهای (Basic Snapshotting)
- A3.4 انشعابگیری و ادغام (Branching and Merging)
- A3.5 بهاشتراکگذاری و بهروزرسانی پروژهها (Sharing and Updating Projects)
- A3.6 بازرسی و مقایسه (Inspection and Comparison)
- A3.7 عیبیابی (Debugging)
- A3.8 اعمال تغییرات به صورت پچ (Patching)
- A3.9 ایمیل (Email)
- A3.10 سیستمهای خارجی (External Systems)
- A3.11 مدیریت (Administration)
- A3.12 دستورات سطح پایین گیت (Plumbing Commands)
2.6 مقدمات گیت (git basics chapter) - تگ کردن (Tagging)
تگ کردن (Tagging)
مانند اکثر VCS ها، گیت توانایی برچسب گذاری نقاط خاص در تاریخچه یک مخزن را به عنوان مهم دارد.
به طور معمول، مردم از این قابلیت برای مشخص کردن نقاط انتشار (v1.0
، v2.0
و غیره) استفاده می کنند.
در این بخش، شما یاد خواهید گرفت که چگونه برچسب های موجود را لیست کنید، چگونه برچسب ها را ایجاد و حذف کنید، و انواع مختلف برچسب ها چیست.
لیست کردن تگ ها (Listing Your Tags)
فهرست کردن تگ های موجود در گیت ساده است.
فقط تایپ کنید 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
یادداشت
|
Listing tag wildcards requires
-l or --list optionاگر شما فقط کل لیست برچسب ها را می خواهید، اجرای دستور با این حال، اگر شما در حال ارائه یک الگوی کارد جوینده برای مطابقت با نام های برچسب هستید، استفاده از |
ساخت تگ (Creating Tags)
گیت از دو نوع تگ پشتیبانی می کند: lightweight و annotated.
یک تگ سبک وزن بسیار شبیه به یک شاخه است که تغییر نمی کند — فقط یک اشاره کننده به یک commit خاص است.
با این حال، برچسب های تشریح شده به عنوان اشیاء کامل در پایگاه داده گیت ذخیره می شوند. آنها چک جمع شده اند؛ شامل نام، ایمیل و تاریخ برچسب دار هستند؛ یک پیام برچسب دار دارند؛ و می توانند با GNU Privacy Guard (GPG) امضا و تأیید شوند. به طور کلی توصیه می شود که شما برچسب های تفسیر شده ایجاد کنید تا بتوانید تمام این اطلاعات را داشته باشید؛ اما اگر شما یک برچسب موقت می خواهید یا به دلایلی نمی خواهید اطلاعات دیگر را نگه دارید، برچسب های سبک وزن نیز در دسترس هستند.
تگهای حاشیهگذاریشده (Annotated Tags)
ایجاد یک برچسب با یادداشت در گیت ساده است.
ساده ترین راه این است که -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.
تگهای سبک (Lightweight Tags)
راه دیگری برای برچسب گذاری 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
برچسبگذاری بعدی (Tagging Later)
شما همچنین می توانید بعد از اینکه از آنها گذشته اید، آنها را برچسب بزنید. فرض کنید که سابقه ی 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
...
اشتراک گذاری تگ ها (Sharing Tags)
به طور پیش فرض، دستور 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
حالا، وقتی کسی از مخزن شما کلان یا استخراج می کند، همه ی برچسب های شما را هم می گیرد.
یادداشت
|
git push pushes both types of tagsدستور |
حذف تگ ها (Deleting 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>
چک کردن تگ ها (Checking out Tags)
اگر می خواهید نسخه های فایل هایی که یک برچسب به آنها اشاره دارد را مشاهده کنید، می توانید یک چکآوت `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
خواهد بود، زیرا با تغییرات جدید شما پیش خواهد رفت، بنابراین مراقب باشید.