محیط اصلی Git در terminal است. ویژگیهای جدید ابتدا در آنجا ظاهر میشوند و تنها در command line است که تمام قدرت Git در اختیار شما قرار دارد. اما متن ساده همیشه بهترین گزینه نیست؛ گاهی به یک نمایش visual نیاز دارید و برخی کاربران با point-and-click interface راحتتر هستند.
نکته مهم این است که رابطهای مختلف برای workflowهای مختلف طراحی شدهاند.
بعضی کلاینتها فقط یک زیرمجموعهی انتخابشده از قابلیتهای Git را ارائه میدهند تا یک روش مشخص کار را (که نویسنده مؤثر میداند) پشتیبانی کنند.
از این منظر، هیچیک از این ابزارها «بهتر» از دیگری نیستند؛ بلکه صرفاً متناسبتر با هدف موردنظر ساخته شدهاند.
همچنین توجه داشته باشید که هیچیک از این graphical clients کاری فراتر از command-line client نمیکنند؛ command-line همچنان جایی است که بیشترین قدرت و کنترل را روی repositories خواهید داشت.
زمانی که Git را نصب میکنید، ابزارهای گرافیکی آن یعنی gitk و git-gui هم نصب میشوند.
gitk یک graphical history viewer است.
میتوانید آن را مانند یک GUI shell قدرتمند روی git log و git grep در نظر بگیرید.
این ابزار زمانی کاربرد دارد که بخواهید چیزی را در گذشته پیدا کنید یا تاریخچه پروژه خود را visualize کنید.
اجرای gitk از command-line سادهترین راه است.
کافیست با cd وارد یک Git repository شوید و تایپ کنید:
$ gitk [git log options]gitk بسیاری از command-line options را میپذیرد که اغلب به دستور زیربنایی git log ارسال میشوند.
یکی از پرکاربردترین آنها --all است، که باعث میشود gitk تمام commits قابل دسترس از هر ref (نه فقط HEAD) را نمایش دهد.
رابط گرافیکی gitk به این شکل است:
-
بالای صفحه شبیه خروجی
git log --graphاست؛ هر نقطه یک commit را نشان میدهد، خطوط رابطه parentها را مشخص میکنند، و refs به صورت باکسهای رنگی نمایش داده میشوند. -
نقطه زرد نشاندهنده HEAD و نقطه قرمز نشاندهنده تغییراتی است که هنوز به commit تبدیل نشدهاند.
-
پایین صفحه نمایی از commit انتخابشده است؛ در سمت چپ comments و patch نمایش داده میشوند و در سمت راست یک summary view قرار دارد.
-
بین این دو بخش مجموعهای از کنترلها برای جستوجوی تاریخچه وجود دارد.
در مقابل، git-gui ابزاری است که عمدتاً برای ساختن commits به کار میرود.
اجرای آن نیز مثل gitk از command-line سادهتر است:
$ git guiو به این شکل خواهد بود:
در سمت چپ بخش index قرار دارد؛ تغییرات unstaged در بالا و تغییرات staged در پایین نمایش داده میشوند. میتوانید با کلیک روی آیکون فایلها، کل فایلها را بین این دو حالت جابهجا کنید، یا با کلیک روی نام یک فایل، آن را برای مشاهده انتخاب کنید.
بالا سمت راست، بخش diff view قرار دارد که تغییرات فایل انتخابشده را نشان میدهد. میتوانید hunkهای فردی یا حتی خطوط تکی را با right-click در این بخش stage کنید.
پایین سمت راست بخش پیام و عملیات است.
پیام خود را در text box وارد کنید و روی “Commit” کلیک کنید تا عملی مشابه git commit انجام شود.
همچنین میتوانید با انتخاب گزینه “Amend”، last commit را اصلاح کنید؛ این کار باعث میشود بخش “Staged Changes” با محتوای commit قبلی بهروز شود.
سپس میتوانید تغییراتی را stage یا unstage کنید، پیام commit را تغییر دهید و دوباره روی “Commit” کلیک کنید تا commit قدیمی با commit جدید جایگزین شود.
gitk و git-gui نمونههایی از ابزارهای task-oriented هستند.
هر یک برای یک هدف مشخص طراحی شدهاند (viewing history و creating commits بهترتیب) و ویژگیهای غیرضروری برای آن کار را حذف کردهاند.
GitHub دو workflow-oriented Git client ساخته است: یکی برای Windows و دیگری برای macOS. این کلاینتها نمونهای از ابزارهای workflow-oriented هستند؛ به جای نمایش همه قابلیتهای Git، روی مجموعهای انتخابشده از ویژگیهای پرکاربرد که به خوبی با هم کار میکنند، تمرکز دارند.
ظاهر این کلاینتها بسیار مشابه است، بنابراین در این فصل آنها را به عنوان یک محصول واحد بررسی میکنیم. ما مرور جزئی و دقیق ابزارها را انجام نمیدهیم (مستندات جداگانه دارند)، اما یک تور سریع از بخش “changes” که بیشتر وقت خود را در آن خواهید گذراند، ارائه میکنیم:
-
سمت چپ: لیست repositories که کلاینت دنبال میکند؛ میتوانید با کلیک روی آیکون “+” یک repository اضافه کنید (چه با clone چه بهصورت محلی).
-
وسط: بخش ورودی commit message و انتخاب فایلها برای اضافه شدن به commit.
-
در Windows، تاریخچه commit دقیقاً زیر این بخش نمایش داده میشود.
-
در macOS در یک تب جداگانه قرار دارد.
-
-
سمت راست: diff view که نشان میدهد چه تغییراتی در working directory رخ داده یا چه تغییراتی در commit انتخابشده وجود دارد.
-
آخرین مورد: دکمه “Sync” در بالا سمت راست که روش اصلی تعامل با شبکه است.
|
Note
|
برای استفاده از این ابزارها نیازی به حساب GitHub ندارید. در حالی که این ابزارها برای نمایش سرویس GitHub و جریان کاری پیشنهادی آن طراحی شدهاند، بهراحتی با هر مخزنی کار میکنند و میتوانند عملیات شبکهای را با هر میزبان Git انجام دهند. |
GitHub برای ویندوز و macOS را میتوانید از https://desktop.github.com/ دانلود کنید. وقتی این برنامهها برای اولین بار اجرا میشوند، شما را از طریق تنظیمات اولیه Git راهنمایی میکنند، مانند پیکربندی نام و آدرس ایمیل، و هر دو برای بسیاری از گزینههای رایج پیکربندی، مانند کشهای اعتبارسنجی و رفتار CRLF، مقادیر پیشفرض منطقی ایجاد میکنند.
هر دو نسخه "همیشه بهروز" هستند – بهروزرسانیها در پسزمینه و در زمانی که برنامهها باز هستند دانلود و نصب میشوند. این شامل نسخهٔ بستهبندیشدهای از Git نیز میشود که به این معنی است احتمالاً دیگر نیازی به نگرانی درباره بهروزرسانی دستی آن نخواهید داشت. در ویندوز، کلاینت میانبری برای راهاندازی PowerShell با Posh-git دارد که بعداً در این فصل بیشتر دربارهاش صحبت خواهیم کرد.
گام بعدی این است که ابزار را با چند مخزن تغذیه کنید. کلاینت فهرستی از مخزنهایی که در GitHub به آنها دسترسی دارید نشان میدهد و میتواند آنها را در یک مرحله کلون کند. اگر از قبل یک مخزن محلی دارید، کافی است پوشهٔ آن را از Finder یا Windows Explorer به پنجرهٔ کلاینت GitHub بکشید تا در فهرست مخازن در سمت چپ قرار بگیرد.
پس از نصب و پیکربندی، میتوانید از کلاینت GitHub برای بسیاری از کارهای رایج Git استفاده کنید. جریان کاری موردنظر برای این ابزار گاهی اوقات «GitHub Flow» نامیده میشود. ما این را با جزئیات بیشتر در ch06-github.asc پوشش میدهیم، اما خلاصهٔ کلی این است که (الف) شما تغییرات را در یک شاخه ثبت (commit) میکنید و (ب) نسبتاً منظم با مخزن راه دور همگامسازی میشوید.
مدیریت شاخهها یکی از زمینههایی است که دو ابزار در آن تفاوت دارند. در macOS، دکمهای در بالای پنجره برای ایجاد شاخهٔ جدید وجود دارد:
در ویندوز، این کار با وارد کردن نام شاخهٔ جدید در ابزارِ تغییر شاخه انجام میشود:
پس از ایجاد شاخه، ایجاد کامیتهای جدید نسبتاً ساده است. در پوشهٔ کاریتان تغییراتی بدهید، و وقتی به پنجرهٔ کلاینت گیتهاب برمیگردید، به شما نشان میدهد کدام فایلها تغییر کردهاند. یک پیامِ کامیت وارد کنید، فایلهایی را که میخواهید شامل شوند انتخاب کنید، و روی دکمهٔ «Commit» کلیک کنید (Ctrl+Enter یا ⌘-Enter).
روش اصلی تعامل شما با مخازن دیگر از طریق شبکه، ویژگی «Sync» است. گیت بهصورت داخلی عملیاتهای مجزایی برای push، fetch، merge و rebase دارد، اما کلاینتهای گیتهاب همهٔ اینها را در یک ویژگی چندمرحلهای خلاصه میکنند. وقتی روی دکمهٔ Sync کلیک میکنید، این اتفاق میافتد:
-
git pull --rebase. اگر این بهخاطر وجود تعارضِ مرج شکست خورد، به git pull --no-rebase برمیگردد.
-
git push.
این متداولترین توالی دستورات شبکهای هنگام کار به این سبک است، بنابراین فشردهسازی آنها در یک فرمان، زمان زیادی صرفهجویی میکند.
این ابزارها برای جریان کاری که برای آن طراحی شدهاند بسیار مناسباند. برنامهنویسان و غیرِ برنامهنویسان میتوانند ظرفِ چند دقیقه روی یک پروژه با هم همکاری کنند، و بسیاری از بهترین شیوهها برای این نوع جریانِ کاری در خودِ ابزارها جاافتادهاند. با این حال، اگر جریانِ کاری شما متفاوت است یا میخواهید کنترل بیشتری روی چگونگی انجام و زمانبندی عملیات شبکهای داشته باشید، پیشنهاد میکنیم از یک کلاینت دیگر یا خط فرمان استفاده کنید.
تعداد زیادی کلاینت گرافیکی گیت وجود دارد که از ابزارهای تخصصی و تکمنظوره تا برنامههایی که سعی میکنند همهٔ قابلیتهای گیت را ارائه دهند، را شامل میشوند. وبسایت رسمی گیت فهرستِ انتخابشدهای از محبوبترین کلاینتها را در https://git-scm.com/downloads/guis دارد. فهرست کاملتری در ویکی گیت در آدرس https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces موجود است.





